home *** CD-ROM | disk | FTP | other *** search
/ Shareware Direct / Shareware Direct.iso / vendinfo / standard.doc < prev   
Text File  |  1993-08-30  |  154KB  |  2,556 lines

  1. /*=================================================================*/
  2. /*              VENDINFO File-Format and Tools Standard            */
  3. /*                 Alpha Test Version 0.90, 8/31/93                */
  4. /*                                                                 */
  5. /*   Copyright 1993, Rams' Island Software, Parker CO 80134-5904   */
  6. /*=================================================================*/
  7.  
  8. /*---------------------------------------- about the document -----*/
  9. /*  This "document" will probably look a bit strange to most eyes. */
  10. /*  That's because it's doing double duty.  It serves as a         */
  11. /*  human-readable standard for the file formats and tools         */
  12. /*  behavior associated with the VENDINFO system.  It also serves  */
  13. /*  as a C and C++ "include file", providing the necessary record  */
  14. /*  definitions and other information in compiler-readable form.   */
  15. /*                                                                 */
  16. /*  This unusual presentation is not being done out of laziness    */
  17. /*  (in fact, you'll notice that a fair amount of work has been    */
  18. /*  done to make the document serve both purposes well).  Rather,  */
  19. /*  it is being done in the interest of accuracy and error         */
  20. /*  minimization.  Because the compiler-readable portion of the    */
  21. /*  standard will have been verified by constructing actual tools  */
  22. /*  to create and use the records, the document should be rather   */
  23. /*  unambiguous, and free from at least some of the sorts of       */
  24. /*  errors that might have resulted from separating it into two    */
  25. /*  separate (human and compiler) parts and attempting to keep     */
  26. /*  them synchronized.                                             */
  27. /*-----------------------------------------------------------------*/
  28.  
  29. /*------------------------------------------- public standard -----*/
  30. /*  This VENDINFO standard is a copyrighted work.  That has been   */
  31. /*  done to insure that the development of the standard is well    */
  32. /*  controlled, and that multiple variations are prevented.  Many  */
  33. /*  standards in the computer industry have been damaged or        */
  34. /*  delayed by the existence of multiple, competing versions.      */
  35. /*  It is in the interest of the entire industry that we are       */
  36. /*  attempting to avoid such a development here.  This standard    */
  37. /*  has been developed "in public", with opportunities for public  */
  38. /*  comment on its general ideas and specific content.  That will  */
  39. /*  continue to be the case.                                       */
  40. /*                                                                 */
  41. /*  This standard is made available for free use by all parties,   */
  42. /*  including the development of tools other than -- or even in    */
  43. /*  competition with -- those of the developers of the standard.   */
  44. /*  This standard may also be distributed freely, provided it is   */
  45. /*  in its original form, not altered in any way.                  */
  46. /*-----------------------------------------------------------------*/
  47.  
  48. /*------------------------------------- contacting the author -----*/
  49. /*  The author can be reached in any of the following ways.        */
  50. /*                                                                 */
  51. /*  By mail:                        By electronic means:           */
  52. /*    H. Rudy Ramsey                  CompuServe: 76244,324        */
  53. /*    Rams' Island Software           FidoNet:    1:104/333        */
  54. /*    7644 E. Lakecliff Way           RIME:       RAMSISLE (1235)  */
  55. /*    Parker, CO 80134-5904 (USA)     Internet:                    */
  56. /*                                       76244.324@compuserve.com  */
  57. /*  By phone: 303-841-2848            BBS:        303-841-6269     */
  58. /*-----------------------------------------------------------------*/
  59.  
  60.                      /*****************************/
  61.                      /*        Background         */
  62.                      /*****************************/
  63.  
  64. /*------------------------------------------------ background -----*/
  65. /*  The VENDINFO system allows the author/publisher of a software  */
  66. /*  package to communicate a great deal of information to the      */
  67. /*  prospective distributors of that package.  The record          */
  68. /*  containing this information is included with the distributed   */
  69. /*  package.  The record is highly structured, compressed, and     */
  70. /*  useable via automated tools for convenience and reliability.   */
  71. /*                                                                 */
  72. /*  It is expected that the VENDINFO.DIZ record will replace the   */
  73. /*  VENDOR.DOC, SYSOP.DOC, LICENSE.DOC, WARRANTY.DOC,              */
  74. /*  SITELICE.DOC, FILE_ID.DIZ, and DESC.SDI commonly found in      */
  75. /*  shareware and public-domain software packages.  It may         */
  76. /*  eventually replace READ-ME.DOC and similar files, as well.     */
  77. /*                                                                 */
  78. /*  The VENDINFO system includes this file-format standard, which  */
  79. /*  defines the structure of the main VENDINFO.DIZ record and a    */
  80. /*  few minor related records, and it includes a number of tools   */
  81. /*  for creating and using the record.  It includes a centralized  */
  82. /*  product registry, which is a repository for VENDINFO records   */
  83. /*  and related material about currently available products.  It   */
  84. /*  also includes a software developer's library, for use in the   */
  85. /*  construction of BBS software, vendor database software, etc.   */
  86. /*                                                                 */
  87. /*  The VENDINFO system includes the following tools:              */
  88. /*    VendEdit -- Editor used by software author/publisher to      */
  89. /*                produce VENDINFO record and, if desired, to      */
  90. /*                "brand" executables with product information.    */
  91. /*    VendPrcs -- Processor used by distributor to extract, and to */
  92. /*                make decisions based on, VENDINFO information.   */
  93. /*    VendView -- VENDINFO record viewer for end users.            */
  94. /*                                                                 */
  95. /*  For more detailed information about the overall VENDINFO       */
  96. /*  concept, see the publicly distributed Concept Paper, which is  */
  97. /*  probably available from the same source from which you         */
  98. /*  obtained this document, or contact Rams' Island Software.      */
  99. /*-----------------------------------------------------------------*/
  100.  
  101. /*----------------------------------- a comment on complexity -----*/
  102. /*  A common initial reaction to the VENDINFO file format is that  */
  103. /*  it's rather complex.  This is true.  There is a great deal of  */
  104. /*  information to be conveyed from authors to distributors and    */
  105. /*  to end users, and to pretend otherwise would be to settle for  */
  106. /*  much less than the actually achievable benefits of VENDINFO.   */
  107. /*  The key is not to strive for an artificially simple VENDINFO   */
  108. /*  record, but to surround that record with tools that make it    */
  109. /*  easy to use.  Those who have seen the early version of the     */
  110. /*  toolset appear to be in unanimous agreement that this has been */
  111. /*  accomplished.                                                  */
  112. /*-----------------------------------------------------------------*/
  113.  
  114. /*-- please ignore the next few lines; they're for the compiler ---*/
  115. #if !defined (__VENDINFO_H)     /* excludes entire file if defined */
  116.  #define __VENDINFO_H
  117.  #define  VENDINFO_VERSION       "0.90"
  118.  #define  VENDINFO_VERSION_DATE  "8/31/93"
  119.  #ifdef VENDINFO_MAIN
  120.   #define EXTERN
  121.  #else
  122.   #define EXTERN extern
  123.  #endif
  124.  
  125.                      /*****************************/
  126.                      /*         The Plan          */
  127.                      /*****************************/
  128.  
  129. /*----------------------------------------- development plans -----*/
  130. /*  This (alpha-test version) file-format description is being     */
  131. /*  released now, slightly in advance of the software developer's  */
  132. /*  library and the toolset, in order to allow an evaluation of    */
  133. /*  structure and information content by those who may be          */
  134. /*  especially interested.  It will be a rare software developer   */
  135. /*  who needs to access the information in the VENDINFO structure  */
  136. /*  directly via the detailed mechanisms described in this         */
  137. /*  standard.  Through a combination of functions and preprocessor */
  138. /*  macros, the software developer's library will provide          */
  139. /*  considerably simplified access.                                */
  140. /*                                                                 */
  141. /*  We are working now to complete the first version of the        */
  142. /*  software developer's library, the VendEdit editor, and the     */
  143. /*  VendPrcs processor.  When these have been completed, they will */
  144. /*  be made available to selected persons for beta test, and that  */
  145. /*  testing activity will also constitute a beta test of the file  */
  146. /*  format itself.  When beta testing is complete, the final       */
  147. /*  version 1.00 of both the file format and the toolset will be   */
  148. /*  released.  Beta testing should start by early September 1993.  */
  149. /*                                                                 */
  150. /*  As soon as those tools have been released, we will then turn   */
  151. /*  our attention to the remaining tools and services, including   */
  152. /*  the (free) VendView viewer for end users, and VendPrcs Plus    */
  153. /*  enhanced processor for distributors, and the Product Registry. */
  154. /*-----------------------------------------------------------------*/
  155.  
  156.                /***************************************/
  157.                /*  Conventions Used in This Standard  */
  158.                /***************************************/
  159.  
  160. /*---------------------------------------- naming conventions -----*/
  161. /*  The naming conventions used in this standard and in the        */
  162. /*  software developer's library are intended to insure that the   */
  163. /*  programmer can tell the nature of an identifier (variable      */
  164. /*  name, function, bit mask, etc.) from its name, and can also    */
  165. /*  easily recognize those identifiers that are part of VENDINFO,  */
  166. /*  to avoid confusing them with others that are part of his/her   */
  167. /*  own program.  Lexical conventions for names are:               */
  168. /*    vibName -- bit mask (where "Name" can be anything).  These   */
  169. /*               should generally be used by ANDing them with the  */
  170. /*               appropriate variable.                             */
  171. /*    vivName -- preprocessor value other than bit mask.  These    */
  172. /*               should generally be used in equality tests (e.g., */
  173. /*                "=="), or as array indexes.                      */
  174. /*    vifName -- function.                                         */
  175. /*    vidName -- data (generally, a variable in the VENDINFO       */
  176. /*               structure).                                       */
  177. /*    vimName -- preprocessor macro (used in library, not in       */
  178. /*               file-format standard per se)                      */
  179. /*    viName  -- data type used within main record (may be         */
  180. /*               structure or special use of ordinary type).       */
  181. /*-----------------------------------------------------------------*/
  182.  
  183. /*----------------------------------------- "shorthand" names -----*/
  184. /*  Each field of the VENDINFO record has associated with it both  */
  185. /*  a "shorthand" name and a data type.  The shorthand name is     */
  186. /*  intended for use in testing or extracting field values by      */
  187. /*  means of the VendPrcs processor or other such tools.  For      */
  188. /*  example, one might extract the short product name using the    */
  189. /*  DOS command:                                                   */
  190. /*       vendprcs VENDINFO.DIZ -xpn                                */
  191. /*  where "x" represents extraction, and "pn" is the shorthand     */
  192. /*  string that represents the product name field.                 */
  193. /*                                                                 */
  194. /*  The shorthand strings used to name the various fields are a    */
  195. /*  part of this standard.  Wherever a field is defined in the     */
  196. /*  later sections of this standard, a comment will contain the    */
  197. /*  shorthand name associated with the field, as well as an        */
  198. /*  indication of its data type.  For example, the product name    */
  199. /*  field definition:                                              */
  200. /*    char         vidProdName[16];      ** pn  s **               */
  201. /*  contains a comment actually shown as:                          */
  202.                                          /* pn  s */
  203. /*  This comment indicates that the shorthand name of this field   */
  204. /*  is "pn", and that it is of type "s".  Types are:               */
  205. /*       b -- boolean                                              */
  206. /*       d -- date                                                 */
  207. /*       n -- number (integer)                                     */
  208. /*       s -- string                                               */
  209. /*       t -- text block (accessed as multiple lines of text,      */
  210. /*            each of which "behaves" as a string).                */
  211. /*  Where internal structures are used, a question mark indicates  */
  212. /*  a placeholder character.  For example, in the author section,  */
  213. /*       viElectAddr  elec;              ** ae?   **               */
  214. /*  the author electronic addresses will have shorthand names      */
  215. /*  consisting of "ae", followed by an additional character found  */
  216. /*  in the documentation of the viElectAddr structure.             */
  217. /*-----------------------------------------------------------------*/
  218.  
  219.                /**************************************/
  220.                /*   VENDINFO Record and File Types   */
  221.                /**************************************/
  222.  
  223. /*----------------------------------------- VENDINFO.DIZ file -----*/
  224. /*  The main data object used in the VENDINFO system is the        */
  225. /*  VENDINFO.DIZ file.  This file contains a human-readable text   */
  226. /*  section in the front (terminated by 0x1A, also known as ^Z).   */
  227. /*  This text section contains a brief outline of major            */
  228. /*  information about the product, followed by paragraphs devoted  */
  229. /*  to information about warranty, trial use and distribution      */
  230. /*  licenses, a "packing list" of files in the package, etc.       */
  231. /*  Additional information can be provided by the author.          */
  232. /*                                                                 */
  233. /*  Following that section is a compressed data record containing  */
  234. /*  comprehensive information about the product and version,       */
  235. /*  author, ordering, technical support, prices and benefits,      */
  236. /*  and distribution policies.                                     */
  237. /*-----------------------------------------------------------------*/
  238.  
  239. /*------------------------------- secondary VENDINFO.DIZ file -----*/
  240. /*  In multipart products (i.e., products packaged in more than    */
  241. /*  one compressed file), only the first package contains a        */
  242. /*  complete VENDINFO.DIZ file.  Subsequent parts contain a        */
  243. /*  complete data record (to allow independent automatic           */
  244. /*  processing of each package), but highly abbreviated human-     */
  245. /*  readable text.                                                 */
  246. /*-----------------------------------------------------------------*/
  247.  
  248. /*---------------------------------- brief executable records -----*/
  249. /*  The VendEdit editor will have the capability of appending, to  */
  250. /*  executable programs, a brief VENDINFO record.  This record     */
  251. /*  will contain minimal product/version/author information and    */
  252. /*  either an abbreviated or a comprehensive distribution policy   */
  253. /*  section, all highly compressed for efficiency.  This would     */
  254. /*  allow, for example, automated detection of retail software,    */
  255. /*  registered versions, etc., if they showed up in BBS uploads,   */
  256. /*  CD-ROMs, and so on.                                            */
  257. /*                                                                 */
  258. /*  The VendPrcs processor will automatically check the            */
  259. /*  executables in a package for appropriate distribution          */
  260. /*  policies, if desired.                                          */
  261. /*-----------------------------------------------------------------*/
  262.  
  263.            /*   VENDINFO Record and File Types (cont.)  */
  264.  
  265. /*--------------------------------------- intermediate record -----*/
  266. /*  The VendEdit editor, and any similar program for creating      */
  267. /*  VENDINFO records, will maintain information about the product  */
  268. /*  in the form of an "intermediate" record, rather than in the    */
  269. /*  form of an actual VENDINFO.DIZ record.  This is necessary      */
  270. /*  for several reasons:                                           */
  271. /*     1. The  editor needs more information than is actually in   */
  272. /*        the VENDINFO.DIZ record itself.                          */
  273. /*     2, Multiple VENDINFO files may be produced from a single    */
  274. /*        intermediate record.                                     */
  275. /*     3. Portions of the VENDINFO.DIZ record are produced         */
  276. /*        automatically from other portions of the record.         */
  277. /*     4. It helps discourage hacking of VENDINFO.DIZ records if   */
  278. /*        the (readily available) editor that produces them cannot */
  279. /*        be used to modify them.                                  */
  280. /*  The exact content of an intermediate record would vary from    */
  281. /*  editor to editor, and is beyond the scope of this standard.    */
  282. /*  As an aid to developers, however, provision has been made in   */
  283. /*  the file-format standard for marking a particular VENDINFO     */
  284. /*  record as of "intermediate" type.  This would allow an editor  */
  285. /*  to utilize the standard uncompressed form of the VENDINFO      */
  286. /*  record as the first section of its intermediate record.        */
  287. /*-----------------------------------------------------------------*/
  288.  
  289.              /******************************************/
  290.              /*  Structure of the VENDINFO.DIZ Record  */
  291.              /******************************************/
  292.  
  293. /*----------------------- overall VENDINFO.DIZ file structure -----*/
  294. /*  The VENDINFO.DIZ file has the following components:            */
  295. /*                                                                 */
  296. /*     1. A readable text portion of indeterminate length,         */
  297. /*        terminated by a 0x1A (^Z) character.  This portion is    */
  298. /*        intended primarily for human consumption, but some       */
  299. /*        automated uses can be made of it.  For that reason, and  */
  300. /*        because of its legal significance in conveying trial-use */
  301. /*        and distribution rights, some properties of its internal */
  302. /*        structure are covered by this standard.                  */
  303. /*                                                                 */
  304. /*     2. A compressed data record, whose structure and content    */
  305. /*        are defined in this standard.  The compressed form of    */
  306. /*        this record is exactly that which would be produced if   */
  307. /*        it were a standalone ZIP compressed file containing one  */
  308. /*        single file ("VENDINFO.DTA") compressed using PKZIP 1.10 */
  309. /*        algorithms as implemented in TurboPower's Asynch for C++ */
  310. /*        library.                                                 */
  311. /*-----------------------------------------------------------------*/
  312.  
  313. /*---------- internal structure of the compressed data record -----*/
  314. /*  When uncompressed, the VENDINFO data record consists of two    */
  315. /*  parts:                                                         */
  316. /*                                                                 */
  317. /*     1. A fixed length record of type viVendinfoRecord, defined  */
  318. /*        below.                                                   */
  319. /*                                                                 */
  320. /*     2. Zero or more "record extensions", which are optional     */
  321. /*        additional records within the compression envelope, also */
  322. /*        defined below.                                           */
  323. /*-----------------------------------------------------------------*/
  324.  
  325. /*---------------------------- a comment on space utilization -----*/
  326. /*  The VENDINFO record contains many optional fields for which    */
  327. /*  fixed-length portions of the record have been allocated.  A    */
  328. /*  common initial reaction is that this is wasteful of space.     */
  329. /*  Please note, however, that fixed-length fields are easier to   */
  330. /*  use, and that any wasted space is actually reclaimed by the    */
  331. /*  compression algorithm.  Tools that create VENDINFO records are */
  332. /*  required to place zero (null) characters in all unused bytes.  */
  333. /*  As a result, the compression algorithm will be MORE effective  */
  334. /*  at avoiding waste than a variable-length record could be.      */
  335. /*-----------------------------------------------------------------*/
  336.  
  337.      /*************************************************************/
  338.      /*  Human-Readable Text Portion of the  VENDINFO.DIZ Record  */
  339.      /*************************************************************/
  340.  
  341. /*------------------------- overall structure of text portion -----*/
  342. /*  The text portion of the VENDINFO.DIZ record is intended to be  */
  343. /*  read by humans, though it also contains structure and format   */
  344. /*  constraints that allow limited use of its content by automated */
  345. /*  tools, which operate by searching for, and perhaps parsing,    */
  346. /*  specified text.  The text portion contains a VENDINFO          */
  347. /*  information header, which has an exact specified text, with    */
  348. /*  minor possible variations, followed by a generation line       */
  349. /*  indicating how and when this particular VENDINFO record was    */
  350. /*  created.  Then a series of sections appear, some created       */
  351. /*  automatically and some by user input, some mandatory and some  */
  352. /*  optional.  Each is preceded by a section label.  The details   */
  353. /*  of all these sections are presented below.                     */
  354. /*-----------------------------------------------------------------*/
  355.  
  356. /*------------------------------- VENDINFO information header -----*/
  357. /*  It will frequently happen that a user or distributor will      */
  358. /*  encounter the VENDINFO system for the first time by actually   */
  359. /*  receiving a package with a VENDINFO.DIZ record in it.  It is   */
  360. /*  important that the human-readable portion of the record begin  */
  361. /*  with sufficient information about VENDINFO, and about          */
  362. /*  obtaining the VENDINFO toolset, that the recipient is able to  */
  363. /*  make full, effective use of the system.  Accordingly, each     */
  364. /*  VENDINFO record will begin with the exact text shown below,    */
  365. /*  except that a developer of an alternative VENDINFO record      */
  366. /*  creation tool may add an additional paragraph at the end,      */
  367. /*  without removing any of the indicated text, and consistent in  */
  368. /*  style, format, and layout with the information already there.  */
  369. /*  This paragraph will allow the developer to advertise the       */
  370. /*  availability of his own tools.                                 */
  371. /*-----------------------------------------------------------------**
  372. ┌────────────────────────────────────────────────────────────────────┐
  373. │     VENDINFO Software Product Distribution Information Record      │
  374. │                                                                    │
  375. │ This record is a means of conveying information about a software   │
  376. │ product from the author to distributors and users.  It contains a  │
  377. │ normal, "human-readable" section (you're reading it now), followed │
  378. │ by a compressed data record.  The data record contains a great     │
  379. │ deal of information in a form useable by automated tools.  This    │
  380. │ allows BBSes, disk vendors, etc. to automatically test for         │
  381. │ permission to distribute, and to automatically extract product     │
  382. │ information for use in BBS files databases, vendor catalogs, etc.  │
  383. │                                                                    │
  384. │ The VENDINFO file standard is published and freely useable.        │
  385. │                                                                    │
  386. │ The VENDINFO toolset includes a free end-user viewer, processing   │
  387. │ tools for use by distributors (BBSes, shareware disk vendors,      │
  388. │ etc.), and the editor used by author/publishers to produce these   │
  389. │ records.  These tools are either free or low cost shareware.       │
  390. │ The toolset can be obtained from many sources, including the       │
  391. │ originators of VENDINFO:                                           │
  392. │                                                                    │
  393. │ Rams' Island Software   Voice: 303-841-2848  CompuServe: 76244,324 │
  394. │ 7644 E. Lakecliff Way     BBS: 303-841-6269     FidoNet: 1:104/333 │
  395. │ Parker, CO 80134-5904 USA                          RIME: RAMSISLE  │
  396. └────────────────────────────────────────────────────────────────────┘
  397.  
  398.               **  Human-Readable Text Portion (cont.) **
  399.  
  400. **---------------------------------- VENDINFO generation line -----*/
  401. /*  The next line following the header box, just above, will       */
  402. /*  indicate the version number of the VENDINFO standard used to   */
  403. /*  construct the record, the tool used to create it (and its      */
  404. /*  version number), and the date of creation.  The format must be */
  405. /*  exactly as shown, except for substitution of version numbers,  */
  406. /*  tool name (one word), and creation date.                       */
  407. /*-----------------------------------------------------------------**
  408. VENDINFO standard V1.00, produced by VendEdit V1.10, 12-Jun-93
  409.  
  410. **--------------------------- secondary record identification -----*/
  411. /*  In "secondary" VENDINFO files (in multipart products, the      */
  412. /*  VENDINFO.DIZ files in packages after the first, are secondary  */
  413. /*  files), some portions of the human-readable section are        */
  414. /*  omitted.  To warn the reader when this occurs, the following   */
  415. /*  text is added.                                                 */
  416. /*-----------------------------------------------------------------**
  417. ┌────────────────────────────────────────────────────────────────────┐
  418. │ Because this is not the primary package of this multi-package      │
  419. │ product, the readable-text portion of this VENDINFO record is      │
  420. │ somewhat abbreviated.  For complete information, see the VENDINFO  │
  421. │ file in the first package listed below under "Required Packages".  │
  422. └────────────────────────────────────────────────────────────────────┘
  423.  
  424. **------------------------------ standards for section labels -----*/
  425. /*  Section labels must be displayed exactly as shown in the       */
  426. /*  respective sections below, including the five equal-sign ('=') */
  427. /*  characters and a space before the label, and a space and at    */
  428. /*  least five equal-sign characters after the label.  The         */
  429. /*  spelling and capitalization of the labels must be exactly as   */
  430. /*  shown.  This will allow various automated tools to find the    */
  431. /*  relevant sections.  If additional sections are desired using   */
  432. /*  labels other than those shown here, those sections should      */
  433. /*  appear in the location indicated for "other information", and  */
  434. /*  their labels should be in the same format, but using the       */
  435. /*  minus ('-') character in place of the equal-sign character.    */
  436. /*  Each section label is preceded by two blank lines.             */
  437. /*-----------------------------------------------------------------*/
  438.  
  439.               /*  Human-Readable Text Portion (cont.) */
  440.  
  441. /*------------------------------- product information section -----*/
  442. /*  The "Product Information" section should contain enough basic  */
  443. /*  information about the product to allow the end-user or         */
  444. /*  distributor to determine the program's relevance, and to allow */
  445. /*  the end-user to order the product or obtain technical support  */
  446. /*  for it.  The information content of this section is not rigid. */
  447. /*  An example is shown below.  In a "secondary" VENDINFO.DIZ      */
  448. /*  file, this section might be somewhat briefer.                  */
  449. /*-----------------------------------------------------------------**
  450. ===== Product Information ============================================
  451.  
  452. Product:                InContext Work Environment Manager
  453.    Version:             1.10
  454.    Version Date:        03/19/93
  455.    Required Packages:    INCX110D INCX110P
  456.    This package is:     INCX110D
  457.    Product Description: <description appears here>
  458.  
  459. Minimal Required Configuration
  460.    CPU:                 8086 (IBM PC) or compatible
  461.    Operating System:    DOS 3.1 or later
  462.    Other requirements:  Hard disk
  463.  
  464. To Purchase Product
  465.    Author/Publisher:
  466.       Rams' Island Software
  467.       7644 E. Lakecliff Way
  468.       Parker, CO 80134-5904
  469.       USA
  470.    Order Phone: 303-841-2848
  471.    Electronic addresses:
  472.       CompuServe: 76244,324
  473.       FidoNet: 1:104/333
  474.       Internet: 76244.324@compuserve.com
  475.       RIME: RAMSISLE
  476.  
  477. For Technical Support
  478.    Address:
  479.       Rams' Island Software
  480.       7644 E. Lakecliff Way
  481.       Parker, CO 80134-5904
  482.       USA
  483.    Support Phone: 303-841-2848
  484.    Support BBS: Rams' Island BBS, 303-841-6269
  485.    Electronic addresses:
  486.       CompuServe: 76244,324
  487.       FidoNet: 1:104/333
  488.       Internet: 76244.324@compuserve.com
  489.       RIME: RAMSISLE
  490.  
  491.               **  Human-Readable Text Portion (cont.) **
  492.  
  493. **------------------------- information for users ("read-me") -----*/
  494. /*  This is an optional section which can be provided by the       */
  495. /*  author.  This allows the author to fully replace the "READ-ME" */
  496. /*  file with VENDINFO (though a single-line READ-ME.DOC file      */
  497. /*  pointing to VENDINFO.DIZ would probably be wise until folks    */
  498. /*  become accustomed to VENDINFO).  The content of this section   */
  499. /*  is entirely up to the author, except that it should not        */
  500. /*  contain information already covered in the required sections   */
  501. /*  of VENDINFO.  This section begins with the standard label      */
  502. /*  'Information for Users ("READ-ME")'.  This section is omitted  */
  503. /*  from secondary VENDINFO files.                                 */
  504. /*-----------------------------------------------------------------*/
  505.  
  506. /*---------------------------------------------- installation -----*/
  507. /*  This optional section ("Installation") allows the author to    */
  508. /*  include installation instructions for the product.  This       */
  509. /*  section is omitted from secondary VENDINFO files.              */
  510. /*-----------------------------------------------------------------*/
  511.  
  512. /*----------------------------------------- other information -----*/
  513. /*  This optional section ("Other Information", or other sections  */
  514. /*  named by the author using "-" section labels) allows the       */
  515. /*  author to include any other desired information, such as       */
  516. /*  advertisements for other products.  These sections are omitted */
  517. /*  from secondary VENDINFO files.                                 */
  518. /*-----------------------------------------------------------------*/
  519.  
  520. /*-------------------------------------- packing list section -----*/
  521. /*  This section ("Packing List") must be automatically generated  */
  522. /*  by any VENDINFO-record creation tool.  It lists the files in   */
  523. /*  the original package as created by the author, including file  */
  524. /*  names, date/time stamps, and CRCs.  This section must conform  */
  525. /*  EXACTLY to the format shown by example below, in order to      */
  526. /*  allow automatic detection of changes to the package.           */
  527. /*-----------------------------------------------------------------**
  528.  
  529. ===== Packing List ===================================================
  530.  
  531. As released by the author or publisher, this package contained the
  532. following files in addition to this VENDINFO.DIZ:
  533.  
  534.         Filename      Size     Date       Time     CRC32
  535.      register.doc    16396  31-Jan-1993  01:10a   481DB182
  536.      whatsnew.doc     7509  31-Jan-1993  01:10a   4A1DD6BC
  537.       install.exe    68291  31-Jan-1993  01:10a   9DD141C9
  538.           lha.exe    34283  20-Jul-1991  02:13a   2C68A172
  539.      inc-docs.lzh   130623  31-Jan-1993  01:10a   7138B4FC
  540.  
  541. **-------------------------------------------------- warranty -----*/
  542. /*  The "Warranty" section is optional, but should appear in all   */
  543. /*  VENDINFO files describing software products.  (Such a section  */
  544. /*  MIGHT be omitted for, say, clip art.)  The warranty should be  */
  545. /*  prepared by the author with appropriate legal study or advice. */
  546. /*  The warranty indicates -- and in many cases limits -- the      */
  547. /*  liability accepted by the author or publisher regarding the    */
  548. /*  product.  This section is omitted from secondary VENDINFO      */
  549. /*  files.                                                         */
  550. /*-----------------------------------------------------------------*/
  551.  
  552.               /*  Human-Readable Text Portion (cont.) */
  553.  
  554. /*-------------------------- license for use and distribution -----*/
  555. /*  The "License for Use and Distribution" section is optional,    */
  556. /*  but should appear in virtually all uses of VENDINFO.  The      */
  557. /*  license grants limited (or unlimited, for public-domain        */
  558. /*  products) rights to use and distribute the product, under      */
  559. /*  conditions specified by the author.  In the case of shareware  */
  560. /*  with distribution restrictions, this section should            */
  561. /*  "incorporate by reference" the distribution restrictions       */
  562. /*  described in the attached compressed data record.  It is       */
  563. /*  undesirable to also list the distribution rights and           */
  564. /*  restrictions in text form here, since that raises the issue of */
  565. /*  possible inconsistencies and weakens the ability of the        */
  566. /*  distributor to rely upon automated processing of the data      */
  567. /*  record for the conveyance of these distribution rights.        */
  568. /*-----------------------------------------------------------------*/
  569.  
  570.                    /********************************/
  571.                    /*  Data Types and Structures   */
  572.                    /*  Used as Building Blocks in  */
  573.                    /*  Later Record Definitions    */
  574.                    /********************************/
  575.  
  576. /*--------------------------------------------------- comment -----*/
  577. /*  Because some C compilers can't handle forward references, it   */
  578. /*  is necessary to define all special data structures here, ahead */
  579. /*  of the place in the main record structure at which they're     */
  580. /*  used.  The human reader of this file-format description may    */
  581. /*  wish to skip past this "Data Types and Structures" section on  */
  582. /*  first reading, returning to it only as the special structures  */
  583. /*  are encountered in the description of the main record.         */
  584. /*-----------------------------------------------------------------*/
  585.  
  586. /*------------------------------------------ byte, word, long -----*/
  587. /*  A byte is an (eight-bit) data unit such as is ordinarily used  */
  588. /*  to store an ASCII character or similar unsigned information.   */
  589. /*                                                                 */
  590. /*  A word consists of two adjacent bytes, stored low-byte-first,  */
  591. /*  as is normal on an Intel 80x86 processor.                      */
  592. /*                                                                 */
  593. /*  A long consists of two adjacent words, stored low-word-first,  */
  594. /*  as is normal on an Intel 80x86 processor.                      */
  595. /*                                                                 */
  596. /*  A character string consists of a specified number of adjacent  */
  597. /*  characters, terminated by a null (0x00).  For example the      */
  598. /*  specification:                                                 */
  599. /*       char         vidProdName[16];                             */
  600. /*  indicates that vidProdName is a 16-character text string, in   */
  601. /*  which one character position will contain a null termination   */
  602. /*  character.  Whenever a character string is used to hold a list */
  603. /*  of items, the list is blank-delimited (e.g., "PCX CGM FLM").   */
  604. /*                                                                 */
  605. /*  For some fields, an array of strings is used.  For example,    */
  606. /*       char         vidCompanyAddress[5][31];                    */
  607. /*  defines vidCompanyAddress as an array consisting of five       */
  608. /*  strings (i.e., five lines of text).  Each string is 31         */
  609. /*  characters long, including the terminating null.               */
  610. /*                                                                 */
  611. /*  The "typedef" statements below are defined as appropriate for  */
  612. /*  a standard C compiler used in an IBM PC (Intel 80x86)          */
  613. /*  environment.                                                   */
  614. /*-----------------------------------------------------------------*/
  615. typedef unsigned char byte;
  616. typedef unsigned int  word;
  617.  
  618.               /*  Data Types and Structures (cont.)   */
  619.  
  620. /*------------------------------------------------ date, time -----*/
  621. /*  Dates are stored in the form in which file dates are stored by */
  622. /*  MS-DOS.  That is, dates are words with the following layout:   */
  623. /*       FEDCBA98 76543210                                         */
  624. /*       xxxxxxx. ........     year - 1980                         */
  625. /*       .......x xxx.....     month (Jan = 1)                     */
  626. /*       ........ ...xxxxx     day of month (1st = 1)              */
  627. /*                                                                 */
  628. /*  To minimize confusion among various human-readable date        */
  629. /*  formats, dates which are displayed in the human-readable text  */
  630. /*  section of the VENDINFO record will be shown in the format:    */
  631. /*       28-Jun-1993                                               */
  632. /*  where the months of the year are:                              */
  633. /*       Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec           */
  634. /*                                                                 */
  635. /*  At present, no times are stored in the compressed data record. */
  636. /*  Times shown in the human-readable text section will be         */
  637. /*  displayed using leading zeroes and AM or PM indicators, to     */
  638. /*  eliminate ambiguity:                                           */
  639. /*       01:10a                                                    */
  640. /*-----------------------------------------------------------------*/
  641. typedef word          Date;
  642.  
  643. /*---------------------------------------------------- prices -----*/
  644. /*  Prices (registration, shipping and handling, etc.) are all     */
  645. /*  specified in a currency identified in the vidPriceWhatCurrency */
  646. /*  field.  The prices themselves are stored as longs, but are     */
  647. /*  interpreted as hundredths of a currency unit.  For example,    */
  648. /*  if the currency is US dollars, the price field would actually  */
  649. /*  contain the price in US cents.  Tools are expected to perform  */
  650. /*  the appropriate division, or provide an appropriately placed   */
  651. /*  decimal point.  Doing it this way eliminates all need for      */
  652. /*  floating point arithmetic in VENDINFO tools.                   */
  653. /*-----------------------------------------------------------------*/
  654. typedef long          Price;
  655.  
  656.               /*  Data Types and Structures (cont.)   */
  657.  
  658. /*=================================================================*/
  659. /*          TextBlock used to store paragraph-type text            */
  660. /*=================================================================*/
  661.  
  662. /*----------------------------------------- typedef TextBlock -----*/
  663. /*  The TextBlock is used to store text which may have embedded    */
  664. /*  formatting codes.  From the point of view of the record        */
  665. /*  structure, a TextBlock[81] is simply an 81-byte character      */
  666. /*  string, just like char[81].  However, the TextBlock is subject */
  667. /*  to some rules that make its use by both record-creating and    */
  668. /*  record-using software special.                                 */
  669. /*                                                                 */
  670. /*  The product descriptions and other TextBlocks in the VENDINFO  */
  671. /*  record are intended to be used by software which will, in      */
  672. /*  general, provide its own formatting, and may rearrange the     */
  673. /*  text, breaking lines at different places, etc.  The resulting  */
  674. /*  reformatted text may be printed in catalogs, used in BBS file  */
  675. /*  descriptions, etc.  Accordingly, the text may contain no       */
  676. /*  characters outside the normal ASCII printable set, except for  */
  677. /*  a small number of special format codes interpretable by the    */
  678. /*  VENDINFO software.  Thus, the user will be prevented from      */
  679. /*  entering text here that is in the high-ASCII character set     */
  680. /*  (above 0xFF) or below the normal printable set (0x20).         */
  681. /*                                                                 */
  682. /*  Please notice in particular that a TextBlock contains no       */
  683. /*  line feeds or carriage returns (word wrapping is done at the   */
  684. /*  time of extraction from the record), and that it is terminated */
  685. /*  by a 0x1A (^Z) character.                                      */
  686. /*                                                                 */
  687. /*  Special formatting characters which must be interpreted        */
  688. /*  by software that uses the VENDINFO record include the          */
  689. /*  following:                                                     */
  690. /*     0x01      -- Paragraph (detected because user skipped line) */
  691. /*     0x02      -- Number of current package (like the "1" in     */
  692. /*                  "part 1 of 4").                                */
  693. /*     0x03      -- Number of packages in product (like the "4" in */
  694. /*                  "part 1 of 4").                                */
  695. /*     0x1A (^Z) -- Used to terminate TextBlock                    */
  696. /*-----------------------------------------------------------------*/
  697. typedef char          TextBlock;
  698.  
  699.               /*  Data Types and Structures (cont.)   */
  700.  
  701. /*=================================================================*/
  702. /*          Field lengths for string and TextBlock fields          */
  703. /*=================================================================*/
  704. /*----- common string lengths -----------------*/
  705. #define  vivLenAddress                 31
  706. #define  vivLenPhone                   20
  707. #define  vivLenPrefix                  9
  708. #define  vivLenMisc1                   81
  709. #define  vivLenMisc2                   161
  710. #define  vivLenMisc3                   241
  711. #define  vivLenName                    41
  712.  
  713. /*----- product information -------------------*/
  714. #define  vivLenProdName                16
  715. #define  vivLenProdExt                 32
  716. #define  vivLenProdVers                5
  717. #define  vivLenCisList                 63
  718. #define  vivLenShotTypes               24
  719. #define  vivLenDesc1                   61
  720. #define  vivLenDesc2                   121
  721. #define  vivLenDesc3                   251
  722. #define  vivLenDesc4                   451
  723. #define  vivLenDesc5                   751
  724. #define  vivLenDesc6                   1501
  725.  
  726. /*----- prices information --------------------*/
  727. #define  vivLenCurrency                21
  728.  
  729. /*----- electronic addresses ------------------*/
  730. #define  vivLenBbsName                 31
  731. #define  vivLenBbsUserName             31
  732. #define  vivLenAmericaOnLine           11
  733. #define  vivLenCompuserve              13
  734. #define  vivLenDelphi                   15
  735. #define  vivLenGenie                       13
  736. #define  vivLenProdigy                 8
  737. #define  vivLenFidonet                 20
  738. #define  vivLenInternet                   81
  739. #define  vivLenRime                    13
  740.  
  741.               /*  Data Types and Structures (cont.)   */
  742.  
  743. /*=================================================================*/
  744. /*          Platform definitions (hardware/software)               */
  745. /*=================================================================*/
  746.  
  747. /*---------------------------------------- typedef viPlatform -----*/
  748. /*  This structure holds information about a particular            */
  749. /*  hardware/software platform.  The VENDINFO record contains two  */
  750. /*  of these structures, representing the minimal requirements of  */
  751. /*  the product, and the recommended configuration.                */
  752. /*                                                                 */
  753. /*  Notice that the vidPlatRam... variables indicate QUANTITIES of */
  754. /*  memory (standard, EMS, Extended, XMS).  In addition, there are */
  755. /*  several "Features" below (vidPlatFeatRam...) that affect the   */
  756. /*  interpretation of these quantities.                            */
  757. /*                                                                 */
  758. /*  The vidPlatDisk... variables indicate the amount of disk space */
  759. /*  required/recommended for a minimal installation and for a full */
  760. /*  installation of the product.  For most products, these values  */
  761. /*  will be identical.                                             */
  762. /*-----------------------------------------------------------------*/
  763. #define  vivPlatCpuCount               8
  764. #define  vivPlatOsCount                10
  765. typedef struct {
  766.    long         vidPlatCpu [ vivPlatCpuCount ];          /* p?c  s */
  767.    word         vidPlatClockSpeedMhz;                    /* p?s  n */
  768.    long         vidPlatOpSys [ vivPlatOsCount ];         /* p?o  s */
  769.    word         vidPlatRamStdKb;                         /* p?rs n */
  770.    word         vidPlatRamEmsKb;                         /* p?rm n */
  771.    word         vidPlatRamExtKb;                         /* p?re n */
  772.    word         vidPlatRamXmsKb;                         /* p?rx n */
  773.    word         vidPlatDiskMinKb;                        /* p?dm n */
  774.    word         vidPlatDiskFullKb;                       /* p?df n */
  775. } viPlatform;      /* 9 fields, 86 bytes */
  776.  
  777. /*--------------------------------------------- platform: CPU -----*/
  778. /*  The platform structure contains 8 words of storage dedicated   */
  779. /*  to specification of a single CPU.  Most of this storage is     */
  780. /*  presently unallocated, in order to allow handling of new       */
  781. /*  machines prior to publication of the next version of this      */
  782. /*  standard.  In general, exactly one bit of this 8-word area     */
  783. /*  will be set to 1.  If the required/recommended platform        */
  784. /*  involves a CPU not on (even the extended) list, zero bits will */
  785. /*  be set, and the required CPU should be indicated in the        */
  786. /*  "catch-all" text field, vidProdOtherRequirements.  If no CPU   */
  787. /*  is relevant (e.g., the product is a book), zero bits will be   */
  788. /*  be set, as well.                                               */
  789. /*-----------------------------------------------------------------*/
  790. #define  vivPlatCpuIntelPC                0
  791. #define  vivPlatCpuMacintosh              1
  792. #define  vivPlatCpuAppleII                2
  793. #define  vivPlatCpuUnalloc3               3
  794. #define  vivPlatCpuUnalloc4               4
  795. #define  vivPlatCpuUnalloc5               5
  796. #define  vivPlatCpuUnalloc6               6
  797. #define  vivPlatCpuUnalloc7               7
  798.  
  799.          /*  Data Types and Structures (Platforms, cont.)   */
  800.  
  801. /*--------------------------- Intel 80x86 -----*/
  802. #define  vibPlatCpu808x                   0x0001
  803. #define  vibPlatCpu80286                  0x0002
  804. #define  vibPlatCpu80386                  0x0004
  805. #define  vibPlatCpu80486                  0x0008
  806. #define  vibPlatCpuPentium                0x0010
  807.  
  808. /*--------------------------- Macintosh -------*/
  809. #define  vibPlatCpuMac68000               0x0001
  810. #define  vibPlatCpuMac68020               0x0002
  811. #define  vibPlatCpuMac68030               0x0004
  812. #define  vibPlatCpuMac68040               0x0008
  813. #define  vibPlatCpuMacPowerPC             0x0010
  814.  
  815. /*--------------------------- AppleII ---------*/
  816. #define  vibPlatCpuAp2                    0x0001
  817. #define  vibPlatCpuAp2Plus                0x0002
  818. #define  vibPlatCpuAp2e                   0x0004
  819. #define  vibPlatCpuAp2eEnhanced           0x0008
  820. #define  vibPlatCpuAp2c                   0x0010
  821. #define  vibPlatCpuAp2cPlus               0x0020
  822. #define  vibPlatCpuAp2gsRom0              0x0040
  823. #define  vibPlatCpuAp2gsRom1              0x0080
  824. #define  vibPlatCpuAp2gsRom3              0x0100
  825.  
  826. /*---------------------------------------------- platform: OS -----*/
  827. /*  This section indicates the required/recommended operating      */
  828. /*  system, and operates similarly to the CPU section described    */
  829. /*  above.                                                         */
  830. /*-----------------------------------------------------------------*/
  831. #define  vivPlatOsIntelMsdos              0
  832. #define  vivPlatOsIntelWindows            1
  833. #define  vivPlatOsIntelOs2                2
  834. #define  vivPlatOsMacSys                  3
  835. #define  vivPlatOsMacAux                  4
  836. #define  vivPlatOsApple2                  5
  837. #define  vivPlatOsUnalloc6                6
  838. #define  vivPlatOsUnalloc7                7
  839. #define  vivPlatOsUnalloc8                8
  840. #define  vivPlatOsUnalloc9                9
  841.  
  842. /*--------------------------- Intel MS-DOS ----*/
  843. #define  vibPlatOsDos10                   0x0001
  844. #define  vibPlatOsDos20                   0x0002
  845. #define  vibPlatOsDos21                   0x0004
  846. #define  vibPlatOsDos211                  0x0008
  847. #define  vibPlatOsDos30                   0x0010
  848. #define  vibPlatOsDos31                   0x0020
  849. #define  vibPlatOsDos32                   0x0040
  850. #define  vibPlatOsDos33                   0x0080 
  851. #define  vibPlatOsDos40                   0x0100
  852. #define  vibPlatOsDos50                   0x0200
  853. #define  vibPlatOsDos60                   0x0400
  854.  
  855.          /*  Data Types and Structures (Platforms, cont.)   */
  856.  
  857. /*--------------------------- Intel Windows ---*/
  858. #define  vibPlatOsWin10                   0x0001
  859. #define  vibPlatOsWin20                   0x0002
  860. #define  vibPlatOsWin30                   0x0004
  861. #define  vibPlatOsWin31                   0x0008       /* >= 286 */
  862. #define  vibPlatOsWinNT                   0x0100
  863. #define  vibPlatOsWinFW                   0x0800
  864. #define  vibPlatOsWinPen                  0x4000
  865.  
  866. /*--------------------------- Intel OS/2 ------*/
  867. #define  vibPlatOsOS2_10                  0x0001
  868. #define  vibPlatOsOS2_11                  0x0002
  869. #define  vibPlatOsOS2_12                  0x0004
  870. #define  vibPlatOsOS2_13                  0x0008
  871. #define  vibPlatOsOS2_20                  0x0010       /* >= 386 */
  872. #define  vibPlatOsOS2_21                  0x0020
  873.  
  874. /*--------------------------- Mac Sys ---------*/
  875. #define  vibPlatOsMacSys6_0_5             0x0001
  876. #define  vibPlatOsMacSys6_0_7             0x0002
  877. #define  vibPlatOsMacSys6_0_8             0x0004
  878. #define  vibPlatOsMacSys7_0               0x0008
  879. #define  vibPlatOsMacSys7_0_1             0x0010
  880. #define  vibPlatOsMacSys7_1               0x0020
  881.  
  882. /*--------------------------- Mac A/UX --------*/
  883. #define  vibPlatOsMacAux2_0_1             0x0001
  884. #define  vibPlatOsMacAux3_0               0x0002
  885.  
  886. /*--------------------------- AppleII ---------*/
  887. #define  vibPlatOsAp2Dos33                0x0001
  888. #define  vibPlatOsAp2Prodos81x            0x0002
  889. #define  vibPlatOsAp2Prodos82x            0x0004
  890. #define  vibPlatOsAp2Gsos4x               0x0100
  891. #define  vibPlatOsAp2Gsos5x               0x0200
  892. #define  vibPlatOsAp2Gsos60               0x0400
  893. #define  vibPlatOsAp2Gsos601              0x0800
  894.  
  895. /*--------------------------- Unix ------------*/
  896.  
  897.          /*  Data Types and Structures (Platforms, cont.)   */
  898.  
  899. /*---------------------------------------- typedef viPlatFeat -----*/
  900. /*  The VENDINFO record also contains ONE list of platform         */
  901. /*  features which may be associated with the product.  Each of    */
  902. /*  these is represented by one byte in the vidPlatFeatures array. */
  903. /*  Each such byte can have one of the following four values.      */
  904. /*  These values are defined this way:                             */
  905. /*       Irrelevant  -- Presence or absence of this feature will   */
  906. /*                      have no effect on whether or not this      */
  907. /*                      product works.                             */
  908. /*       Supported   -- This particular feature is specifically    */
  909. /*                      supported by the product.                  */
  910. /*       Recommended -- It is recommended that this feature be     */
  911. /*                      present if the product is used.            */
  912. /*       Required    -- This feature must be present, or the       */
  913. /*                      product won't work.                        */
  914. /*       WontWork    -- If this feature is present, the product    */
  915. /*                      won't work.                                */
  916. /*-----------------------------------------------------------------*/
  917. #define  vivPlatFeatCount              55
  918. typedef struct {
  919.    byte         vidPlatFeatures [ vivPlatFeatCount ];     /* pf?   */
  920.                                              /* see vidPlatFeat... */
  921. } viPlatFeat;      /* 55 fields, 55 bytes */
  922.  
  923. /*--------------------------- field values ----*/
  924. #define  vibPlatFeatIrrelevant            0x0
  925. #define  vibPlatFeatSupported             0x1
  926. #define  vibPlatFeatRecommended           0x2
  927. #define  vibPlatFeatRequired              0x3
  928. #define  vibPlatFeatWontWork              0x4
  929.  
  930. /*--------------------------- configuration ---*/
  931. #define  vivPlatFeatConfFpu               0             /* p?fcf n */
  932. #define  vivPlatFeatConfLaptop            1             /* p?fcl n */
  933. #define  vivPlatFeatConfMca               2             /* p?fcm n */
  934.  
  935. /*--------------------------- RAM -------------*/
  936. #define  vivPlatFeatRamExpandOrExtend     3             /* p?fro n */
  937. #define  vivPlatFeatRamEms                4             /* p?frm n */
  938. #define  vivPlatFeatRamExtended           5             /* p?fre n */
  939. #define  vivPlatFeatRamXms                6             /* p?frx n */
  940. #define  vivPlatFeatRamHimem              7             /* p?frh n */
  941.  
  942. /*--------------------------- disk drives------*/
  943. #define  vivPlatFeatDiskHard              8             /* p?fdh n */
  944. #define  vivPlatFeatDiskFloppyOnly        9             /* p?fdf n */
  945. #define  vivPlatFeatDiskCdrom             10            /* p?fdc n */
  946.  
  947. /*--------------------------- ports -----------*/
  948. #define  vivPlatFeatPortPar               11            /* p?fop n */
  949. #define  vivPlatFeatPortSer               12            /* p?fos n */
  950. #define  vivPlatFeatPortPcmcia            13            /* p?foc n */
  951. #define  vivPlatFeatPortGame              14            /* p?fog n */
  952.  
  953.  
  954.          /*  Data Types and Structures (Platforms, cont.)   */
  955. /*--------------------------- video -----------*/
  956. #define  vivPlatFeatVidMonoText           15            /* p?fvm n */
  957. #define  vivPlatFeatVidHerc               16            /* p?fvh n */
  958. #define  vivPlatFeatVidTandy              17            /* p?fvt n */
  959. #define  vivPlatFeatVidCga                18            /* p?fvc n */
  960. #define  vivPlatFeatVidEga                19            /* p?fve n */
  961. #define  vivPlatFeatVidMcga               20            /* p?fvn n */
  962. #define  vivPlatFeatVidMcga256            21            /* p?fvo n */
  963. #define  vivPlatFeatVidVga                22            /* p?fvv n */
  964. #define  vivPlatFeatVidSvgaVesa           23            /* p?fvw n */
  965. #define  vivPlatFeatVidSvgaOther          24            /* p?fvs n */
  966. #define  vivPlatFeatVid8514               25            /* p?fv8 n */
  967. #define  vivPlatFeatVidXga                26            /* p?fvx n */
  968. #define  vivPlatFeatVidMonoMonitor        27            /* p?fva n */
  969. #define  vivPlatFeatVidColorMonitor       28            /* p?fvb n */
  970.  
  971. /*--------------------------- input -----------*/
  972. #define  vivPlatFeatInpKeyboard           29            /* p?fik n */
  973. #define  vivPlatFeatInpMouse              30            /* p?fim n */
  974. #define  vivPlatFeatInpDigitizer          31            /* p?fid n */
  975. #define  vivPlatFeatInpJoystick           32            /* p?fij n */
  976.  
  977. /*--------------------------- scanner ---------*/
  978. #define  vivPlatFeatScanHandLogitech      33            /* p?fal n */
  979. #define  vivPlatFeatScanHandGenius        34            /* p?fag n */
  980. #define  vivPlatFeatScanFlatbedHP         35            /* p?faf n */
  981.  
  982. /*--------------------------- printer ---------*/
  983. #define  vivPlatFeatPrinterYes            36            /* p?fpy n */
  984. #define  vivPlatFeatPrintText             37            /* p?fpt n */
  985. #define  vivPlatFeatPrintGraphIbm         38            /* p?fpi n */
  986. #define  vivPlatFeatPrintGraphEpson9      39            /* p?fpe n */
  987. #define  vivPlatFeatPrintGraphEpson24     40            /* p?fpf n */
  988. #define  vivPlatFeatPrintHpDeskjet        41            /* p?fpd n */
  989. #define  vivPlatFeatPrintHpPaintjet       42            /* p?fpp n */
  990. #define  vivPlatFeatPrintHpLaserjet       43            /* p?fpl n */
  991. #define  vivPlatFeatPrintPostscript       44            /* p?fps n */
  992. #define  vivPlatFeatPrintPlotter          45            /* p?fpo n */
  993.  
  994. /*--------------------------- modem -----------*/
  995. #define  vivPlatFeatModemAnySerial        46            /* p?fma n */
  996. #define  vivPlatFeatModemHayesCompat      47            /* p?fmh n */
  997. #define  vivPlatFeatModemFax              48            /* p?fmf n */
  998.  
  999. /*--------------------------- sound card ------*/
  1000. #define  vivPlatFeatSoundCardYes          49            /* p?fsy n */
  1001. #define  vivPlatFeatSoundAdlib            50            /* p?fsa n */
  1002. #define  vivPlatFeatSoundCovox            51            /* p?fsc n */
  1003. #define  vivPlatFeatSoundBlast            52            /* p?fsb n */
  1004. #define  vivPlatFeatSoundMidi             53            /* p?fsm n */
  1005.  
  1006. /*--------------------------- network ---------*/
  1007. #define  vivPlatFeatNetwork               54            /* p?fne n */
  1008.  
  1009.               /*  Data Types and Structures (cont.)   */
  1010.  
  1011. /*--------------------------------------- typedef viElectAddr -----*/
  1012. /*          Electronic Addresses for Author/Support/Ordering       */
  1013. /*-----------------------------------------------------------------*/
  1014. typedef struct {
  1015.    char         vidBbsName       [ vivLenBbsName ];    /* ?en s */
  1016.    char         vidBbsPhone      [ vivLenPhone ];      /* ?eb s */
  1017.    char         vidBbsUserName   [ vivLenBbsUserName]; /* ?eu s */
  1018.    char         vidAmericaOnLine [vivLenAmericaOnLine];/* ?ea s */
  1019.    char         vidCompuserve    [ vivLenCompuserve ]; /* ?ec s */
  1020.    char         vidDelphi        [ vivLenDelphi ];     /* ?ed s */
  1021.    char         vidGenie         [ vivLenGenie ];      /* ?eg s */
  1022.    char         vidProdigy       [ vivLenProdigy ];    /* ?ep s */
  1023.    char         vidFidonet       [ vivLenFidonet ];    /* ?ef s */
  1024.    char         vidInternet      [ vivLenInternet ];   /* ?ei s */
  1025.    char         vidRime          [ vivLenRime ];       /* ?er s */
  1026.    TextBlock    vidOtherElect    [ vivLenMisc2 ];      /* ?eo s */
  1027. } viElectAddr;     /* 12 fields, 417 bytes */
  1028.  
  1029.               /*  Data Types and Structures (cont.)   */
  1030.  
  1031. /*------------------------------------------ typedef viRegPkg -----*/
  1032. /*  This structure contains information about the price and        */
  1033. /*  registration benefits associated with a shareware product.     */
  1034. /*  Two of these structures are in the VENDINFO record: one        */
  1035. /*  represents the minimum registration package, and one the       */
  1036. /*  maximum.  If there is only one registration price for a        */
  1037. /*  shareware product, the two structurea should be identical.     */
  1038. /*  If there's any price or benefits information not covered by    */
  1039. /*  the available fields, the "catch-all" vidRegPriceBenefitsOther */
  1040. /*  field can be used.                                             */
  1041. /*-----------------------------------------------------------------*/
  1042. typedef struct {
  1043.    Price        vidRegPrice;                             /* i?p  n */
  1044.    long         vidRegBenefits[2]; /* see vibBene... */  /* i?b?   */
  1045.    char         vidRegPriceBenefitsOther[81];            /* i?v  s */
  1046. } viRegPkg;        /* 37 fields, 93 bytes */
  1047.  
  1048. /*------------------------------------- registration benefits -----*/
  1049. /*  These boolean fields contain a list of possible registration   */
  1050. /*  benefits.                                                      */
  1051. /*-----------------------------------------------------------------*/
  1052. #define  vibBeneAddlData                  0x00000001L   /* i?bad b */
  1053. #define  vibBeneAddlProg                  0x00000002L   /* i?bap b */
  1054. #define  vibBeneBbsSupp                   0x00000004L   /* i?bbs b */
  1055. #define  vibBeneBranding                  0x00000008L   /* i?bbr b */
  1056. #define  vibBeneBugNotice                 0x00000010L   /* i?bbu b */
  1057. #define  vibBeneCheatCode                 0x00000020L   /* i?bcc b */
  1058. #define  vibBeneCommission                0x00000040L   /* i?bcm b */
  1059. #define  vibBeneContest                   0x00000080L   /* i?bcn b */
  1060. #define  vibBeneCustom                    0x00000100L   /* i?bcu b */
  1061. #define  vibBeneConvertOther              0x00000200L   /* i?bcr b */
  1062. #define  vibBeneConvertOld                0x00000400L   /* i?bcx b */
  1063. #define  vibBeneDiscount                  0x00000800L   /* i?bdi b */
  1064. #define  vibBeneEnhanced                  0x00001000L   /* i?ben b */
  1065. #define  vibBeneFreeGoodies               0x00002000L   /* i?bfg b */
  1066. #define  vibBeneFuture                    0x00004000L   /* i?bfu b */
  1067. #define  vibBeneGuarantee                 0x00008000L   /* i?bgu b */
  1068. #define  vibBeneHints                     0x00010000L   /* i?bhi b */
  1069. #define  vibBeneLatest                    0x00020000L   /* i?bla b */
  1070. #define  vibBeneLifetimeSupp              0x00040000L   /* i?bls b */
  1071. #define  vibBeneNewsletter                0x00080000L   /* i?bne b */
  1072. #define  vibBenePreprint                  0x00100000L   /* i?bpp b */
  1073. #define  vibBenePrintedManual             0x00200000L   /* i?bpm b */
  1074. #define  vibBeneQuickRef                  0x00400000L   /* i?bqr b */
  1075. #define  vibBeneRecordLimit               0x00800000L   /* i?brl b */
  1076. #define  vibBeneRrsElim                   0x01000000L   /* i?bre b */
  1077. #define  vibBeneRepeatDelay               0x02000000L   /* i?brd b */
  1078. #define  vibBeneSampleData                0x04000000L   /* i?bsd b */
  1079. #define  vibBeneSource                    0x08000000L   /* i?bso b */
  1080. #define  vibBeneSubscription              0x10000000L   /* i?bsu b */
  1081. #define  vibBeneTimeLimit                 0x20000000L   /* i?btl b */
  1082. #define  vibBeneTutorial                  0x40000000L   /* i?btu b */
  1083. #define  vibBeneUpdateNotice              0x80000000L   /* i?bun b */
  1084. #define  vibBeneUpdateFree                0x00000001L   /* i?buf b */
  1085. #define  vibBeneVoiceSupp                 0x00000002L   /* i?bvs b */
  1086. #define  vibBeneWatermark                 0x00000004L   /* i?bwa b */
  1087. #define  vivBeneCount                35
  1088.  
  1089.                      /*****************************/
  1090.                      /*  VENDINFO Header Section  */
  1091.                      /*****************************/
  1092.  
  1093. /*--------------------------------------------------- comment -----*/
  1094. /*  Because some C compilers can't handle forward references, it   */
  1095. /*  is necessary to define the individual sections of the fixed-   */
  1096. /*  length VENDINFO record before defining the record itself.  The */
  1097. /*  sections are:                                                  */
  1098. /*       header                                                    */
  1099. /*       product information                                       */
  1100. /*       author information                                        */
  1101. /*       ordering information                                      */
  1102. /*       prices and benefits information                           */
  1103. /*       support information                                       */
  1104. /*       general (channel-independent) distribution policy         */
  1105. /*       channel-specific distribution policy                      */
  1106. /*-----------------------------------------------------------------*/
  1107.  
  1108. /*=================================================================*/
  1109. /*          Header Section structure definition                    */
  1110. /*=================================================================*/
  1111.  
  1112. /*-------------------------------------- typedef viSectHeader -----*/
  1113. /*  This section of the record is used for identification and      */
  1114. /*  security, and contains information about the overall record,   */
  1115. /*  such as the date/time of its creation.                         */
  1116. /*-----------------------------------------------------------------*/
  1117. typedef struct {
  1118.    char         vidHeadString[12];         /* "VENDINFO" + 2 words */
  1119.    word         vidHeadVersion;
  1120.    byte         vidHeadViType;                /* see vivRecType... */
  1121.    Date         vidHeadPrepDate;
  1122.    long         vidHeadTextRecordSize;
  1123.    long         vidHeadTextRecordCRC;
  1124.    long         vidHeadDataRecordSize;             /* uncompressed */
  1125.    long         vidHeadDataRecordCRC;              /* uncompressed */
  1126.    long         vidHeadUserId;
  1127.    long         vidHeadAuthenticityKey1;
  1128.    long         vidHeadAuthenticityKey2;
  1129. } viSectHeader;    /* 11 fields, 45 bytes */
  1130.  
  1131. /*=================================================================*/
  1132. /*          Constants used in VENDINFO Header Section              */
  1133. /*=================================================================*/
  1134.  
  1135. /*----------------- VENDINFO record types (see vidHeadViType) -----*/
  1136. /*  There are several entirely different types of VENDINFO record, */
  1137. /*  with different structures.  The record-type field allows them  */
  1138. /*  to be differentiated.  These are the possible values.          */
  1139. /*-----------------------------------------------------------------*/
  1140. #define  vivRecTypePackageMain            1
  1141. #define  vivRecTypePackageSecondary       2
  1142. #define  vivRecTypeIntermed               99
  1143.  
  1144.                      /*****************************/
  1145.                      /*      Product Section      */
  1146.                      /*****************************/
  1147.  
  1148. /*=================================================================*/
  1149. /*          Product Section structure definition                   */
  1150. /*=================================================================*/
  1151.  
  1152. /*------------------------------------- typedef viSectProduct -----*/
  1153. /*  The Product Section describes the product and version,         */
  1154. /*  including names, descriptions, categories, keywords, and       */
  1155. /*  minimal and recommended platforms.                             */
  1156. /*-----------------------------------------------------------------*/
  1157. typedef struct {
  1158.    byte         vidProdType;    /* see vivProdType...*/   /* py  n */
  1159.    char         vidProdName [ vivLenProdName ];           /* pp  s */
  1160.    char         vidProdNameExtension [ vivLenProdExt ];   /* pe  s */
  1161.    char         vidProdVersion [ vivLenProdVers ];        /* pv  s */
  1162.    Date         vidProdVersionDate;                       /* pt  d */
  1163.    char         vidProdVersionReason [ vivLenMisc2 ];     /* pr  t */
  1164.    char         vidProdFileNamePrefix [ vivLenPrefix ];   /* pn  s */
  1165.    byte         vidProdNumberOfParts;                     /* ppn n */
  1166.    char         vidProdThisPart [ vivLenPrefix ];         /* ppt s */
  1167.    char         vidProdListOfParts [ vivLenMisc1 ];       /* ppl s */
  1168.    char         vidProdListOfCisParts [ vivLenCisList ];  /* ppc s */
  1169.    char         vidProdScreenshotTypes [vivLenShotTypes]; /* ph  s */
  1170.    char         vidProdOldPkgsReplaced [ vivLenMisc1 ];   /* px  s */
  1171.    TextBlock    vidProdDescription1 [ vivLenDesc1 ];      /* pd1 t */
  1172.    TextBlock    vidProdDescription2 [ vivLenDesc2 ];      /* pd2 t */
  1173.    TextBlock    vidProdDescription3 [ vivLenDesc3 ];      /* pd3 t */
  1174.    TextBlock    vidProdDescription4 [ vivLenDesc4 ];      /* pd4 t */
  1175.    TextBlock    vidProdDescription5 [ vivLenDesc5 ];      /* pd5 t */
  1176.    TextBlock    vidProdDescription6 [ vivLenDesc6 ];      /* pd6 t */
  1177.    viPlatform   platMin;                                  /* p1?   */
  1178.    viPlatform   platRec;                                  /* p2?   */
  1179.    viPlatFeat   platFeat;                                 /* pf?   */
  1180.    char         vidProdOtherRequiredSw [ vivLenMisc1 ];   /* ps  s */
  1181.    TextBlock    vidProdOtherRequirements [ vivLenMisc3 ]; /* po  t */
  1182.    long         vidProdCategories[5];                     /* pc? ? */
  1183.    char         vidProdKeywords [ vivLenMisc1 ];          /* pk  s */
  1184. } viSectProduct;   /* 100 fields, 4271 bytes */
  1185.  
  1186.  
  1187. /*=================================================================*/
  1188. /*          Constants used in Product Section                      */
  1189. /*=================================================================*/
  1190.  
  1191. /*---------------------------- product type (see vidProdType) -----*/
  1192. /*  While VENDINFO is primarily intended to describe software      */
  1193. /*  products, it can be used to describe various other types of    */
  1194. /*  computer-related products, especially those that can actually  */
  1195. /*  be distributed electronically.  Here are possible values of    */
  1196. /*  the product-type field.                                        */
  1197. /*-----------------------------------------------------------------*/
  1198. #define  vivProdTypeSoftware              0
  1199. #define  vivProdTypeHardware              1
  1200. #define  vivProdTypeDataFile              2
  1201. #define  vivProdTypeTextFile              3
  1202. #define  vivProdTypeBook                  4
  1203. #define  vivProdTypeMagazine              5
  1204. #define  vivProdTypeCatalog               6
  1205. #define  vivProdTypeVideo                 7
  1206.  
  1207.                  /*      Product Section (cont.)      */
  1208.  
  1209. /*=================================================================*/
  1210. /*          Notes on Product Section                               */
  1211. /*=================================================================*/
  1212.  
  1213. /*-------------------------- product name, extension, version -----*/
  1214. /*  In order to allow use of the information by automated tools,   */
  1215. /*  the product name and version are broken into components.  For  */
  1216. /*  example, the phrase "Lotus 1-2-3 Spreadsheet Processor, V2.20" */
  1217. /*  would be broken down as follows:                               */
  1218. /*    vidProdName          -- "Lotus 1-2-3"                        */
  1219. /*    vidProdNameExtension -- "Spreadsheet Processor"              */
  1220. /*    vidProdVersion       -- "2.20"                               */
  1221. /*-----------------------------------------------------------------*/
  1222.  
  1223. /*--------------------------- product package filenames, etc. -----*/
  1224. /*  Distribution packages are typically compressed files with the  */
  1225. /*  filename prefix indicating the specific product package, and   */
  1226. /*  the filename extension indicating the compression program used */
  1227. /*  to produce the package.  Except where shorter names are        */
  1228. /*  required (e.g., on CompuServe), the filename prefix should     */
  1229. /*  take one of the following forms:                               */
  1230. /*    AAAAA99P -- For multipart packages, the first five           */
  1231. /*                characters are alphabetic, and represent the     */
  1232. /*                product.  The next two are numeric, and          */
  1233. /*                represent the version.  The last is alphabetic,  */
  1234. /*                using the sequence { A, B, C, ... }, and         */
  1235. /*                indicates which part of the total product this   */
  1236. /*                particular package is.                           */
  1237. /*    AAAAA99  -- For single-part packages, any of the remaining   */
  1238. /*    AAAAA999    three forms is allowed, where the product name   */
  1239. /*    AAAAAA99    portion is strictly alphabetic, and the version  */
  1240. /*                portion is strictly numeric.                     */
  1241. /*                                                                 */
  1242. /*  vidProdNumberOfParts contains the number of packages making up */
  1243. /*  the product.                                                   */
  1244. /*                                                                 */
  1245. /*  vidProdListOfParts contains a blank-separated list of the      */
  1246. /*  filename prefixes of the packages making up the product.       */
  1247. /*  Similarly, vidProdListOfCisParts contains a list of the        */
  1248. /*  filename prefixes to be used on a system on which filename     */
  1249. /*  prefixes are restricted to six characters.  In each case, the  */
  1250. /*  first part listed will contain the main VENDINFO.DIZ files,    */
  1251. /*  while the others, if any, will contain secondary VENDINFO.DIZ  */
  1252. /*  files.  Finally,  vidProdOldPkgsReplaced contains a list of    */
  1253. /*  filename prefixes of previous versions packages replaced by    */
  1254. /*  this version.                                                  */
  1255. /*-----------------------------------------------------------------*/
  1256.  
  1257. /*-------------------------------------- product screen shots -----*/
  1258. /*  If the author/publisher makes available a set of screen shots  */
  1259. /*  of the product, on request and/or via the VENDINFO Product     */
  1260. /*  Registry, the filename extensions (e.g., graphical formats) of */
  1261. /*  the available screen shots should be listed in                 */
  1262. /*  vidProdScreenshotTypes.  Use the artificial filename           */
  1263. /*  extension "FLM" to indicate hardcopy photos available only     */
  1264. /*  from the author.  A sample value for this string is            */
  1265. /*  "PCX CGM FLM".                                                 */
  1266. /*-----------------------------------------------------------------*/
  1267.  
  1268.                  /*      Product Section (cont.)      */
  1269.  
  1270. /*---------------------------------------- other requirements -----*/
  1271. /*  Two "catch-all" variables are provided for recording platform  */
  1272. /*  requirements or recommendations that aren't covered in the     */
  1273. /*  viPlatform structure.  Wherever possible, requirements should  */
  1274. /*  be defined in the viPlatform structures, since that allows     */
  1275. /*  complete processing by automated tools.  These "catch-alls"    */
  1276. /*  are only for cases not covered.                                */
  1277. /*                                                                 */
  1278. /*  vidProdOtherRequiredSw is a simple string which might    */
  1279. /*  contain one or more (blank-separated) names of other software  */
  1280. /*  necessary to use the product.  Likely examples are run-time    */
  1281. /*  packages, such as VBRUN200.DLL, or main applications if the    */
  1282. /*  product is an add-on (e.g., "Lotus 1-2-3" for a spreadsheet    */
  1283. /*  macro package).                                                */
  1284. /*                                                                 */
  1285. /*  vidProdOtherRequirements is a TextBlock (defined earlier)      */
  1286. /*  in which to list hardware, operating systems, peripherals,     */
  1287. /*  etc., that are not covered in viPlatform, and in which to list */
  1288. /*  version numbers and other details of the requirements in       */
  1289. /*  viPlatform WHEN NECESSARY.  For example, a laser-printer       */
  1290. /*  product that works on HP LaserJets, but only starting with the */
  1291. /*  LaserJet II, should so indicate here (e.g., "LaserJet II and   */
  1292. /*  later"), but if it works with all LaserJets, no specification  */
  1293. /*  is necessary in this TextBlock.                                */
  1294. /*-----------------------------------------------------------------*/
  1295.  
  1296. /*--------------------------- product categories and keywords -----*/
  1297. /*  vidProdCategories is an array containing one primary and four  */
  1298. /*  secondary category codes, using the numbering scheme developed */
  1299. /*  by Rob Rosenberger for his ASP Catalog Entry Editor or a       */
  1300. /*  similar scheme.  VENDINFO editor and processor tools will      */
  1301. /*  probably use an external file to map categories into category  */
  1302. /*  codes, and vice versa.  A small example portion of such a file */
  1303. /*  is:                                                            */
  1304. /*     01000000 Utilities                                          */
  1305. /*        01010000 Disk utilities                                  */
  1306. /*           01010100 Disk cataloging                              */
  1307. /*           01010200 Hard disk utilities                          */
  1308. /*           01010300 Floppy disk utilities                        */
  1309. /*        01020000 File utilities                                  */
  1310. /*           01020100 Backup/restore                               */
  1311. /*           01020200 Encryption & security                        */
  1312. /*  Shorthand codes for product categories are "pc1", "pc2", etc.  */
  1313. /*                                                                 */
  1314. /*  vidProdKeywords is a blank-separated list of keywords          */
  1315. /*  describing the product.  In general, keywords should be listed */
  1316. /*  in order of importance, since it is possible that only a       */
  1317. /*  portion of the list will be used.  At present, no standardized */
  1318. /*  list of keywords is planned (i.e., the list is "free-form").   */
  1319. /*-----------------------------------------------------------------*/
  1320.  
  1321.                      /*****************************/
  1322.                      /*      Author Section       */
  1323.                      /*****************************/
  1324.  
  1325. /*=================================================================*/
  1326. /*          Author Section structure definition                    */
  1327. /*=================================================================*/
  1328.  
  1329. /*-------------------------------------- typedef viSectAuthor -----*/
  1330. /*  The Author section contains information about the product's    */
  1331. /*  author or publisher.  This is distinct from information about  */
  1332. /*  how to order, or how to obtain technical support.              */
  1333. /*-----------------------------------------------------------------*/
  1334. typedef struct {
  1335.    char         vidAuthorName [ vivLenName ];             /* an  s */
  1336.    char         vidAuthorCompanyName [ vivLenName ];      /* ac  s */
  1337.    char         vidAuthorCompanyAddress[5][vivLenAddress];/* aa  t */
  1338.    char         vidAuthorPhone [ vivLenPhone ];           /* ap  s */
  1339.    char         vidAuthorFax [ vivLenPhone ];             /* af  s */
  1340.    char         vidAuthorQueriesPhone [ vivLenPhone ];    /* aq  s */
  1341.    viElectAddr  elec;                                     /* ae?   */
  1342.    word         vidAuthorMembership; /* vibMember... */   /* am? b */
  1343.    char         vidAuthorMembershipOther [ vivLenMisc1 ]; /* amx s */
  1344. } viSectAuthor;    /* 25 fields, 797 bytes */
  1345.  
  1346. /*----------------------------------------------- memberships -----*/
  1347. /*  Author membership in trade associations may be relevant to     */
  1348. /*  users and distributors.  For example, ASP distributor members  */
  1349. /*  are required to mark products by ASP author/publisher members  */
  1350. /*  in their catalogs and files lists.  Trade associations not     */
  1351. /*  recognized in the current version of the standard can be       */
  1352. /*  handled via the vidAuthorMembershipOther string.  Known        */
  1353. /*  trade associations are:                                        */
  1354. /*       ASAD -- Association of Shareware Authors and              */
  1355. /*               Distributors                                      */
  1356. /*       ASP  -- Association of Shareware Professionals            */
  1357. /*       DSAH -- Deutschsprachige Shareware Authoren und           */
  1358. /*               Haendlervereinigung                               */
  1359. /*       ESC  -- Educational Shareware Cooperative                 */
  1360. /*       SPA  -- Software Publisher's Association                  */
  1361. /*       STAR -- Shareware Trade Association and Resources         */
  1362. /*-----------------------------------------------------------------*/
  1363. #define  vibMemberAsad                    0x00000001    /* amb b */
  1364. #define  vibMemberAsp                     0x00000002    /* ama b */
  1365. #define  vibMemberDsah                    0x00000004    /* amd b */
  1366. #define  vibMemberEsc                     0x00000008    /* ame b */
  1367. #define  vibMemberSpa                     0x00000010    /* amp b */
  1368. #define  vibMemberStar                    0x00000020    /* ams b */
  1369.  
  1370.  
  1371. /*=================================================================*/
  1372. /*          Notes on Author Section                                */
  1373. /*=================================================================*/
  1374.  
  1375. /*-------------------------------------- author, company name -----*/
  1376. /*  The vidAuthorName field is intended for the author's personal  */
  1377. /*  name, if that is to be included in the record.  The            */
  1378. /*  vidCompanyName field must not be omitted.  If no separate      */
  1379. /*  company name is used, the author's personal name will appear   */
  1380. /*  here.  This field is used as one of the keys in the VENDINFO   */
  1381. /*  security arrangements.  Changing it will invalidate any        */
  1382. /*  security and user-registration keys based on it.               */
  1383. /*-----------------------------------------------------------------*/
  1384.  
  1385.                      /*****************************/
  1386.                      /*      Order Section        */
  1387.                      /*****************************/
  1388.  
  1389. /*=================================================================*/
  1390. /*          Order Section structure definition                     */
  1391. /*=================================================================*/
  1392.  
  1393. /*--------------------------------------- typedef viSectOrder -----*/
  1394. /*  The Order section provides contact information for ordering    */
  1395. /*  the product or related products, as distinct from contact      */
  1396. /*  information about the author or technical support.             */
  1397. /*-----------------------------------------------------------------*/
  1398. typedef struct {
  1399.    char         vidOrderAddress [ 6 ] [ vivLenAddress ];  /* oa  t */
  1400.    char         vidOrderPhoneTollFree [ vivLenPhone ];    /* ot  s */
  1401.    char         vidOrderPhone [ vivLenPhone ];            /* op  s */
  1402.    char         vidOrderFax [ vivLenPhone ];              /* of  s */
  1403.    viElectAddr  elec;                                     /* oe?   */
  1404.    word         vidOrderCredit;  /* see vibCredit... */   /* oc? b */
  1405.    char         vidOrderCreditOther [ vivLenMisc1 ];      /* ocx s */
  1406.    long         vidOrderFunds;      /* see vibPay... */   /* ox? b */
  1407.    char         vidOrderFundsOther [ vivLenMisc1 ];       /* oxx s */
  1408.    char         vidOrderBankAccount [ vivLenMisc1 ];      /* ob  s */
  1409.    char         vidOrderOtherRegSources [ vivLenMisc2 ];  /* oo  t */
  1410. } viSectOrder;   /* 46 fields, 1073 bytes */
  1411.  
  1412. /*---------------------------------------------- credit cards -----*/
  1413. /*  The vidOrderCredit field allows specification of known credit  */
  1414. /*  cards that are acceptable.  Any additional cards and           */
  1415. /*  information about surcharges, etc.,  can be listed in the      */
  1416. /*  vidOrderCreditOther string.                                    */
  1417. /*-----------------------------------------------------------------*/
  1418. #define  vibCreditAccessEurocard          0x0001        /* oce b */
  1419. #define  vibCreditAmexOptima              0x0002        /* oca b */
  1420. #define  vibCreditDinersCard              0x0004        /* occ b */
  1421. #define  vibCreditDiscover                0x0008        /* ocd b */
  1422. #define  vibCreditMastercard              0x0010        /* ocm b */
  1423. #define  vibCreditVisa                    0x0020        /* ocv b */
  1424.  
  1425. /*---------------- acceptable currencies and forms of payment -----*/
  1426. /*  The vidOrderFunds field allows specification of the various    */
  1427. /*  forms of cash, check, and money order payment that may be      */
  1428. /*  used.  International banking practices and exchange rates make */
  1429. /*  this a somewhat complicated area.  Unfortunately, the fields   */
  1430. /*  therefore required detailed definition.                        */
  1431. /*    PmoSameCountry -- postal money order issued in recipient's   */
  1432. /*                      country.                                   */
  1433. /*    PmoInternational -- international postal money order         */
  1434. /*    CheckPersSame -- a personal check written in the currency of */
  1435. /*                     the recipient's country and drawn on a bank */
  1436. /*                     in the recipient's country.                 */
  1437. /*    CheckPersHardSender -- a personal check written in a stable, */
  1438. /*                     convertible, "hard" currency other than     */
  1439. /*                     that used in recipient's country, and drawn */
  1440. /*                     on a bank in the sender's, and not the      */
  1441. /*                     recipient's, country.                       */
  1442. /*    CheckPersHardRecip -- a personal check written in a stable,  */
  1443. /*                     convertible, "hard" currency other than     */
  1444. /*                     that used in recipient's country, and       */
  1445. /*                     drawn on a bank in the recipient's country. */
  1446.  
  1447.                  /*      Order Section (cont.)        */
  1448.  
  1449. /*    CheckPersOther -- a personal check other than those          */
  1450. /*                     described above, typically in a "soft"      */
  1451. /*                     currency.                                   */
  1452. /*    CheckBank... -- same as the four categories just listed,     */
  1453. /*                     but the check is a bank draft or cashier's  */
  1454. /*                     check.                                      */
  1455. /*    Cash... -- similar to check categories above, but involving  */
  1456. /*                     actual currency sent through the mail       */
  1457. /*    TravCheck... -- similar to categories above, but involving   */
  1458. /*                     traveller's checks.                         */
  1459. /*    AmexMoneyOrder -- American Express Money Order               */
  1460. /*    EuroChequeSenderGuar -- EuroCheque written in the currency   */
  1461. /*                     of the sender, with a valid cheque          */
  1462. /*                     guarantee card number written on the back.  */
  1463. /*    DirectBank -- Direct bank-to-bank electronic funds transfer, */
  1464. /*                     paid to the bank and account number         */
  1465. /*                     indicated in vidOrderBankAccount.           */
  1466. /*    PurchOrderNbrMost -- Purchase order numbers accepted in most */
  1467. /*                     cases from major firms.                     */
  1468. /*    PurchOrderHardcopyMost -- Purchase orders accepted in        */
  1469. /*                     hardcopy from most major firms.             */
  1470. /*-----------------------------------------------------------------*/
  1471. #define  vibPayPmoSameCountry             0x00000001     /* oxms b */
  1472. #define  vibPayPmoInternational           0x00000002     /* oxmi b */
  1473. #define  vibPayCheckPersSame              0x00000004     /* oxps b */
  1474. #define  vibPayCheckPersHardSender        0x00000008     /* oxph b */
  1475. #define  vibPayCheckPersHardRecip         0x00000010     /* oxpr b */
  1476. #define  vibPayCheckPersOther             0x00000020     /* oxpo b */
  1477. #define  vibPayCheckBankSame              0x00000040     /* oxbs b */
  1478. #define  vibPayCheckBankHardSender        0x00000080     /* oxbh b */
  1479. #define  vibPayCheckBankHardRecip         0x00000100     /* oxbr b */
  1480. #define  vibPayCheckBankOther             0x00000200     /* oxbo b */
  1481. #define  vibPayCashSame                   0x00000400     /* oxcs b */
  1482. #define  vibPayCashHard                   0x00000800     /* oxch b */
  1483. #define  vibPayCashOther                  0x00001000     /* oxco b */
  1484. #define  vibPayTravCheckSame              0x00002000     /* oxts b */
  1485. #define  vibPayTravCheckOther             0x00004000     /* oxto b */
  1486. #define  vibPayAmexMoneyOrder             0x00008000     /* oxa  b */
  1487. #define  vibPayEuroChequeOrigGuar         0x00010000     /* oxe  b */
  1488. #define  vibPayDirectBank                 0x00020000     /* oxd  b */
  1489. #define  vibPayPurchOrderNbrMost          0x00040000     /* oxon b */
  1490. #define  vibPayPurchOrderHardcopyMost     0x00080000     /* oxoh b */
  1491.  
  1492.                      /*****************************/
  1493.                      /*      Prices Section       */
  1494.                      /*****************************/
  1495.  
  1496. /*=================================================================*/
  1497. /*          Prices Section structure definition                    */
  1498. /*=================================================================*/
  1499.  
  1500. /*-------------------------------------- typedef viSectPrices -----*/
  1501. /*  The Prices structure contains information about prices and     */
  1502. /*  registration benefits for the product, including availability  */
  1503. /*  of site licenses and dealer discounts, royalty information,    */
  1504. /*  non-shareware versions, etc.                                   */
  1505. /*-----------------------------------------------------------------*/
  1506. #define  vivPriceShipCount               7
  1507. typedef struct {
  1508.    viRegPkg     mini;                                     /* i1?   */
  1509.    viRegPkg     maxi;                                     /* i2?   */
  1510.    char         vidPriceWhatCurrency [ vivLenCurrency ];  /* ic  s */
  1511.    Price        vidPriceShip [ vivPriceShipCount];        /* is?   */
  1512.                                 /* see vivPriceShip... */
  1513.    word         vidPriceMiscFlags;  /* vibPriceMisc... */ /* im?   */
  1514.    Price        vidPriceRoyaltyMin;                       /* irm n */
  1515.    char         vidPriceRoyaltyMinText [ vivLenMisc1 ];   /* irn s */
  1516.    Price        vidPriceRoyaltyMax;                       /* irx n */
  1517.    char         vidPriceRoyaltyMaxText [ vivLenMisc1 ];   /* iry s */
  1518.    char         vidPriceRoyaltyAgent [ vivLenMisc1 ];     /* ira s */
  1519. } viSectPrices;    /* 96 fields, 488 bytes */
  1520.  
  1521. /*------------------------------------- shipping and handling -----*/
  1522. /*  These fields allow separate shipping and handling charges by   */
  1523. /*  continent, and allow a separate rate for recipients in the     */
  1524. /*  same country as the order address.  These amounts are to be    */
  1525. /*  expressed in the same currency as the registration prices.     */
  1526. /*-----------------------------------------------------------------*/
  1527. #define  vivPriceShipSameCountry          0               /* isc n */
  1528. #define  vivPriceShipNorthAmerica         1               /* isn n */
  1529. #define  vivPriceShipSouthAmerica         2               /* iss n */
  1530. #define  vivPriceShipEurope               3               /* ise n */
  1531. #define  vivPriceShipAsia                 4               /* isa n */
  1532. #define  vivPriceShipAfrica               5               /* isf n */
  1533. #define  vivPriceShipPacificRim           6               /* isp n */
  1534.  
  1535. /*--------------------------------------------- pricing misc. -----*/
  1536. /*  vidPriceMiscFlags contains these binary flags.  The fields are */
  1537. /*  defined as follows:                                            */
  1538. /*      Sitelice -- site licenses are available                    */
  1539. /*      SiteliceSeeText -- actual site license rates are included  */
  1540. /*                     in the human-readable portion of the        */
  1541. /*                     VENDINFO record.                            */
  1542. /*      Discount -- dealer discount prices are available           */
  1543. /*      DiscountSeeText -- actual dealer discount rates are        */
  1544. /*                     included in the human-readable portion of   */
  1545. /*                     the VENDINFO record.                        */
  1546. /*      Royalty -- royalties are required for some forms of        */
  1547. /*                     distribution of this product.  Note that    */
  1548. /*                     royalty rates can be specified here in the  */
  1549. /*                     VENDINFO data record (e.g.,                 */
  1550. /*                     vidPriceRoyaltyMin), in the human-readable  */
  1551. /*                     portion of the record, or neither.          */
  1552. /*      RoyaltyNegot -- royalty rates are always negotiated on a   */
  1553. /*                     case-by-case basis.                         */
  1554.  
  1555.                      /*      Prices Section       */
  1556.  
  1557. /*      RoyaltySeeText -- royalty rates are included in the        */
  1558. /*                     human-readable portion of the VENDINFO      */
  1559. /*                     record.                                     */
  1560. /*      NsvAvailable -- a non-shareware (enhanced) version of this */
  1561. /*                     shareware product is available.             */
  1562. /*      LcrAvailable -- a low-cost retail version of this product  */
  1563. /*                     is available for distribution.              */
  1564. /*-----------------------------------------------------------------*/
  1565. #define  vibPriceMiscSitelice             0x00000001      /* ims b */
  1566. #define  vibPriceMiscSiteliceSeeText      0x00000002      /* imt b */
  1567. #define  vibPriceMiscDiscount             0x00000004      /* imd b */
  1568. #define  vibPriceMiscDiscountSeeText      0x00000008      /* ime b */
  1569. #define  vibPriceMiscRoyalty              0x00000010      /* imr b */
  1570. #define  vibPriceMiscRoyaltyNegot         0x00000020      /* imq b */
  1571. #define  vibPriceMiscRoyaltySeeText       0x00000040      /* imp b */
  1572. #define  vibPriceMiscNsvAvailable         0x00000080      /* imn b */
  1573. #define  vibPriceMiscLcrAvailable         0x00000100      /* iml b */
  1574. #define  vivPriceMiscCount           9
  1575.  
  1576.                      /*****************************/
  1577.                      /*     Support Section       */
  1578.                      /*****************************/
  1579.  
  1580. /*=================================================================*/
  1581. /*          Support Section structure definition                   */
  1582. /*=================================================================*/
  1583.  
  1584. /*------------------------------------- typedef viSectSupport -----*/
  1585. /*  The Support section contains contact information for technical */
  1586. /*  support for the product.                                       */
  1587. /*-----------------------------------------------------------------*/
  1588. typedef struct {
  1589.    char         vidSupportAddress [6] [vivLenAddress];    /* sa  t */
  1590.    char         vidSupportPhone [ vivLenPhone ];          /* sp  s */
  1591.    char         vidSupportFax [ vivLenPhone ];            /* sf  s */
  1592.    viElectAddr  elec;                                     /* se?   */
  1593.    TextBlock    vidSupportForums [ vivLenMisc1 ];         /* ss  t */
  1594. } viSectSupport;   /* 16 fields, 724 bytes */
  1595.  
  1596.                      /*****************************/
  1597.                      /*     General Section       */
  1598.                      /*****************************/
  1599.  
  1600. /*=================================================================*/
  1601. /*        General (channel-independent) Distribution Section       */
  1602. /*=================================================================*/
  1603.  
  1604. /*------------------------------------- typedef viSectGeneral -----*/
  1605. /*  The General section specifies information about the product's  */
  1606. /*  packaging and distribution that applies across all channels of */
  1607. /*  distribution.  Most of the information is in the form of       */
  1608. /*  binary flags, defined a bit later.  The various Text fields    */
  1609. /*  serve as additional-information "catch-all" fields for various */
  1610. /*  subjects that are discussed in connection with those binary    */
  1611. /*  flags.                                                         */
  1612. /*-----------------------------------------------------------------*/
  1613. typedef struct {
  1614.    word         vidGenlDistType; /* see vivDistType... */ /* gt  n */
  1615.    word         vidGenlMiscFlags;   /* vidGenlMisc... */  /* gm? b */
  1616.    char         vidGenlGeogText [ vivLenMisc1 ];          /* gg  s */
  1617.    char         vidGenlInstallText [ vivLenMisc1 ];       /* gi  s */
  1618.    char         vidGenlCompressText [ vivLenMisc1 ];      /* gc  s */
  1619.    char         vidGenlChangeText [ vivLenMisc1 ];        /* gh  s */
  1620.    char         vidGenlGroupSimText [ vivLenMisc1 ];      /* gs  s */
  1621.    char         vidGenlGroupDisText [ vivLenMisc1 ];      /* gd  s */
  1622.    char         vidGenlVendorUpgradeText [ vivLenMisc1 ]; /* gu  s */
  1623. } viSectGeneral;   /* 23 fields, 571 bytes */
  1624.  
  1625.                  /*     General Section (cont.)       */
  1626.  
  1627. /*-------------------------------- product distribution types -----*/
  1628. /*  The vidGenlDistType field allows the author to specify the     */
  1629. /*  basic distribution category into which the product falls.      */
  1630. /*  Definitions are:                                               */
  1631. /*       Commercial -- "commercial" product, not distributable     */
  1632. /*                     except through written permission/contract. */
  1633. /*       CommercialDist -- "commercial" product specifically       */
  1634. /*                     intended for use in distribution packages.  */
  1635. /*                     This code would probably appear only on an  */
  1636. /*                     executable program, not in a VENDINFO.DIZ.  */
  1637. /*       ShareRegistered -- registered version of shareware        */
  1638. /*                     program, not distributable.  This code      */
  1639. /*                     would probably appear only on an executable */
  1640. /*                     program, not in a VENDINFO.DIZ.             */
  1641. /*       ShareRegDist -- registered version of shareware program   */
  1642. /*                     specifically intended for use in            */
  1643. /*                     distribution packages (e.g., an install     */
  1644. /*                     program).  This code would probably appear  */
  1645. /*                     only on an executable program, not in a     */
  1646. /*                     VENDINFO.DIZ.                               */
  1647. /*       ShareRestricted -- shareware product, with distribution   */
  1648. /*                     restrictions expressed in the Distribution  */
  1649. /*                     section of the record.                      */
  1650. /*       ShareUnlimited -- shareware product, freely distributable */
  1651. /*                     by all channels without further permission. */
  1652. /*       CopyrUnlimFree -- copyrighted program, but freely         */
  1653. /*                     distributable by all channels, and freely   */
  1654. /*                     useable without charge or registration.     */
  1655. /*                     Sometimes called "freeware" or              */
  1656. /*                     "bannerware".                               */
  1657. /*       Demo -- demonstration program, not necessarily fully      */
  1658. /*                     functional, freely distributable by all     */
  1659. /*                     channels.                                   */
  1660. /*       Public -- public-domain product, no copyright retained,   */
  1661. /*                     freely distributable, useable, modifiable.  */
  1662. /*       Retired -- used in a VENDINFO-only distribution package,  */
  1663. /*                     to request removal of previous version(s).  */
  1664. /*-----------------------------------------------------------------*/
  1665. #define  vivGenlTypeCommercial            0
  1666. #define  vivGenlTypeCommercialDist        1
  1667. #define  vivGenlTypeShareRegistered       2
  1668. #define  vivGenlTypeShareRegDist          3
  1669. #define  vivGenlTypeShareRestricted       4
  1670. #define  vivGenlTypeShareUnlimited        5
  1671. #define  vivGenlTypeCopyrUnlimFree        6
  1672. #define  vivGenlTypeDemo                  7
  1673. #define  vivGenlTypePublic                8
  1674. #define  vivGenlTypeRetired               9
  1675. #define  vivGenlTypeCount            10
  1676.  
  1677.                  /*     General Section (cont.)       */
  1678.  
  1679. /*------ channel-independent flags (see genl.viGenlMiscFlags) -----*/
  1680. /*  vidGenlMiscFlags contains various binary flags representing    */
  1681. /*  policies applicable to the product across all distribution     */
  1682. /*  channels.  Definitions are:                                    */
  1683. /*       GeogOnlyUS -- distribution outside the United States is   */
  1684. /*                     illegal because product includes encryption */
  1685. /*                     technology that cannot be exported (any     */
  1686. /*                     other geographical restrictions are placed  */
  1687. /*                     in vidGenlGeogText).                        */
  1688. /*       PkgNoMods -- no modifications whatever are permitted to   */
  1689. /*                     the compressed package as released by the   */
  1690. /*                     author/publisher.                           */
  1691. /*       FilesNoMods -- while addition of files may be allowed, no */
  1692. /*                     modifications of the original files are     */
  1693. /*                     allowed.                                    */
  1694. /*       HelpGoSeparate -- Help files, GO.BAT, etc. may be added.  */
  1695. /*       AdsSeparate -- advertisements may be added, but only as   */
  1696. /*                     separate files.                             */
  1697. /*       AdsAppended -- advertisements may be appended to the      */
  1698. /*                     author's original documentation files, but  */
  1699. /*                     the files must otherwise remain unchanged.  */
  1700. /*       Install -- a different installation program or procedure  */
  1701. /*                     may be substituted or added.                */
  1702. /*       InstallSeeText -- must see human-readable portion of      */
  1703. /*                     VENDINFO record for additional constraints  */
  1704. /*                     on installation changes.                    */
  1705. /*       Compress -- a different compression program can be used   */
  1706. /*                     to repackage the files in this package.     */
  1707. /*       CompressSeeText -- must see human-readable portion of     */
  1708. /*                     VENDINFO record for additional constraints  */
  1709. /*                     on compression changes.                     */
  1710. /*       GroupSim -- product can be distributed in a single        */
  1711. /*                     package with other similar products, as in  */
  1712. /*                     PsL's megadisks.                            */
  1713. /*       GroupSimPerm -- written permission is required for such   */
  1714. /*                     distribution.                               */
  1715. /*       GroupSimSeeText -- must see human-readable portion of     */
  1716. /*                     VENDINFO record for additional constraints  */
  1717. /*                     on such distribution.                       */
  1718. /*       GroupDis -- product can be distributed in a single        */
  1719. /*                     package with other dis-similar products, as */
  1720. /*                     in a "starter set".                         */
  1721. /*       GroupDisPerm -- written permission is required for such   */
  1722. /*                     distribution.                               */
  1723. /*       GroupDisSeeText -- must see human-readable portion of     */
  1724. /*                     VENDINFO record for additional constraints  */
  1725. /*                     on such distribution.                       */
  1726. /*-----------------------------------------------------------------*/
  1727. #define  vibGenlMiscGeogOnlyUS            0x00000001     /* gmu  b */
  1728. #define  vibGenlMiscPkgNoMods             0x00000002     /* gmp  b */
  1729. #define  vibGenlMiscFilesNoMods           0x00000004     /* gmf  b */
  1730. #define  vibGenlMiscHelpGoSeparate        0x00000008     /* gmhs b */
  1731. #define  vibGenlMiscAdsSeparate           0x00000010     /* gmas b */
  1732. #define  vibGenlMiscAdsAppended           0x00000020     /* gmaa b */
  1733. #define  vibGenlMiscInstall               0x00000040     /* gmi  b */
  1734. #define  vibGenlMiscInstallSeeText        0x00000080     /* gmit b */
  1735. #define  vibGenlMiscCompress              0x00000100     /* gmc  b */
  1736. #define  vibGenlMiscCompressSeeText       0x00000200     /* gmct b */
  1737.  
  1738.                  /*     General Section (cont.)       */
  1739.  
  1740. #define  vibGenlMiscGroupSim              0x00000400     /* gms  b */
  1741. #define  vibGenlMiscGroupSimPerm          0x00000800     /* gmsp b */
  1742. #define  vibGenlMiscGroupSimSeeText       0x00001000     /* gmst b */
  1743. #define  vibGenlMiscGroupDis              0x00002000     /* gmd  b */
  1744. #define  vibGenlMiscGroupDisPerm          0x00004000     /* gmdp b */
  1745. #define  vibGenlMiscGroupDisSeeText       0x00008000     /* gmdt b */
  1746. #define  vivGenlMiscCount        16
  1747.  
  1748.                      /*****************************/
  1749.                      /*   Distribution Section    */
  1750.                      /*****************************/
  1751.  
  1752. /*=================================================================*/
  1753. /*        (channel-specific) Distribution Section                  */
  1754. /*=================================================================*/
  1755.  
  1756. /*------------------------------------- typedef viSectDistrib -----*/
  1757. /*  For each defined distribution channel, one of these structures */
  1758. /*  specifies the distribution requirements of the product.        */
  1759. /*-----------------------------------------------------------------*/
  1760. #define  vivDistDataCount            6
  1761. typedef struct {
  1762.    long         vidDistFlags;                            /* d?m? b */
  1763.    word         vidDistData [ vivDistDataCount ];        /* d?d?   */
  1764.    char         vidDistAddlReqs [ vivLenMisc1 ];         /* d?a  s */
  1765. } viSectDistrib;   /* 36 fields, 97 bytes */
  1766.  
  1767. /*----------------- distribution types/channels (see dist[i]) -----*/
  1768. /*  The distribution channels currently defined are:               */
  1769. /*    Bbs  -- to End User by BBS                                   */
  1770. /*    Fdn  -- to BBSes by File-Distribution Network                */
  1771. /*    DiskVend  -- to End User by Mail-Order Disk Vendor           */
  1772. /*    Cdrom  -- by CD-ROM (other than File-Distribution Network)   */
  1773. /*    OneRack  -- to End User by Single-Site Rack                  */
  1774. /*    Rack  -- to Seller by Rackware Distributor                   */
  1775. /*    Book  -- to End User in Book Enclosure Diskette              */
  1776. /*    Subscrip  -- to End User by Subscription Service             */
  1777. /*    Magazine  -- to End User by Magazine "Cover" Disk            */
  1778. /*    Broadcast -- to End User by TV/Cable/Satellite Broadcast     */
  1779. /*    Phone900  -- to End User by 1-900-Type Phone Service         */
  1780. /*    Install  -- Installation by Distributor on User's Machine    */
  1781. /*    Undesc  -- Distribution by Substantially Different Means     */
  1782. /*-----------------------------------------------------------------*/
  1783. #define  vivDistChanBbs                   0               /* db... */
  1784. #define  vivDistChanFdn                   1               /* df... */
  1785. #define  vivDistChanDiskVend              2               /* dd... */
  1786. #define  vivDistChanCdrom                 3               /* dc... */
  1787. #define  vivDistChanOneRack               4               /* do... */
  1788. #define  vivDistChanRack                  5               /* dr... */
  1789. #define  vivDistChanBook                  6               /* dk... */
  1790. #define  vivDistChanSubscrip              7               /* ds... */
  1791. #define  vivDistChanMagazine              8               /* dm... */
  1792. #define  vivDistChanTvBroadcast           9               /* dt... */
  1793. #define  vivDistChanPhone900              10              /* dp... */
  1794. #define  vivDistChanInstall               11              /* di... */
  1795. #define  vivDistChanUndesc                12              /* du... */
  1796. #define  vivDistChanCount            13
  1797.  
  1798. /*----------------------- specific-channel distribution flags -----*/
  1799. /*  vidDistFlags records a set of boolean values indicating        */
  1800. /*  various distribution policies for a particular distribution    */
  1801. /*  channel.  The overall approach taken here is to allow the      */
  1802. /*  author to specify the following, in order:                     */
  1803. /*     1. Who falls in the "qualifying" distributor set?           */
  1804. /*     2. What actions remove a distributor from the "qualifiers"? */
  1805. /*     3. Do qualifiers still require written permission, or can   */
  1806. /*        they distribute the product based on being qualifiers?   */
  1807. /*     4. If qualifiers need no written permission, are other      */
  1808. /*        distributors allowed to distribute WITH PERMISSION, or   */
  1809. /*        are they prohibited from distributing altogether?        */
  1810. /*        (The point of this question is to help a non-qualifying  */
  1811. /*        distributor know whether to review a product and request */
  1812. /*        permission, or to ignore the product altogether.)        */
  1813.  
  1814.                  /*   Distribution Section (cont.)    */
  1815.  
  1816. /*  Definitions are:                                               */
  1817. /*     Prohib -- Distribution via this channel is prohibited.      */
  1818. /*     Any -- Any distributor falls in the "qualifying" set (but   */
  1819. /*                     may still drop out of that group if         */
  1820. /*                     engaged in disqualifying actions.)          */
  1821. /*     AnyAsp -- Any distributor who is an ASP member (in the      */
  1822. /*                     membership class relevant this channel)     */
  1823. /*                     qualifies.  The point of this choice is     */
  1824. /*                     that ASP distributor members agree to       */
  1825. /*                     certain advertising and business practices  */
  1826. /*                     (and are monitored for compliance), and     */
  1827. /*                     some authors (ASP members or not) therefore */
  1828. /*                     grant permission to these distributors      */
  1829. /*                     without further investigation.              */
  1830. /*     AnyDisclose -- Any distributor qualifies if he agrees to    */
  1831. /*                     inform customer: (1) that product is        */
  1832. /*                     shareware, (2) what shareware is, (3) that  */
  1833. /*                     he claims no ownership rights in the        */
  1834. /*                     product, and (4) that separate payment is   */
  1835. /*                     required if product is used other than for  */
  1836. /*                     author-specified evaluation period.         */
  1837. /*     AnyUG -- Any user group qualifies.                          */
  1838. /*     AnyNonProfUG -- Any non-profit user group qualifies.        */
  1839. /*     AnyConsult -- Any consultant, who charges user for software */
  1840. /*                     evaluation and installation services,       */
  1841. /*                     qualifies.                                  */
  1842. /*     AnyHardware -- Any hardware dealer, who charges user for    */
  1843. /*                     hardware and installs product on it,        */
  1844. /*                     qualifies.                                  */
  1845. /*     AnyRecFromAuth -- Any distributor who has received the      */
  1846. /*                     product directly from the author, or in a   */
  1847. /*                     mailing done by the author's direct agent,  */
  1848. /*                     qualifies.                                  */
  1849. /*     NoIfAnyCharge -- A distributor is disqualified if he        */
  1850. /*                     charges the customer in any way.            */
  1851. /*     NoIfPerYear -- A distributor is disqualified if he charges  */
  1852. /*                     a subscription fee exceeding the rate in    */
  1853. /*                     vivDistDataPerYear.                         */
  1854. /*     NoIfPerProg -- A distributor is disqualified if he charges  */
  1855. /*                     more per program than the rate in           */
  1856. /*                     vivDistDataPerProg.                         */
  1857. /*     NoIfPer360K -- A distributor is disqualified if he charges  */
  1858. /*                     by diskette, connect time hour, or other    */
  1859. /*                     volume measure, more than the rate          */
  1860. /*                     in vivDistDataPer360K.                      */
  1861. /*     NoIfPerCdrom -- A distributor is disqualified if he charges */
  1862. /*                     more for the CD-ROM on which product is     */
  1863. /*                     being distributed than the rate in          */
  1864. /*                     vivDistDataPerCdrom.                        */
  1865. /*     NoIfCdrom -- Distribution by this channel is prohibited if  */
  1866. /*                     done by CD-ROM (FDN channel only).          */
  1867. /*     NoIfOtherMass -- Distribution by this channel is prohibited */
  1868. /*                     if done by mass medium other than CD-ROM,   */
  1869. /*                     such as bulk tape (FDN channel only).       */
  1870. /*     NoIfTargetBbs -- Distribution by this (CD-ROM) channel is   */
  1871. /*                     prohibited if the CD-ROM is targetted at    */
  1872. /*                     BBS Sysops (e.g., set up to support         */
  1873. /*                     mounting of CD-ROM on BBS, marketed to      */
  1874. /*                     Sysops, etc.)                               */
  1875.  
  1876.                  /*   Distribution Section (cont.)    */
  1877.  
  1878. /*     NoIfTargetDistrib -- Distribution by this (CD-ROM) channel  */
  1879. /*                     is prohibited if the CD-ROM is targetted at */
  1880. /*                     shareware distributors (e.g., "vendor in a  */
  1881. /*                     box" kits, retail-store vending machines,   */
  1882. /*                     etc.)                                       */
  1883. /*     NoIfTargetBbs -- Distribution by this (CD-ROM) channel is   */
  1884. /*                     prohibited if the CD-ROM is targetted at    */
  1885. /*                     End Users.                                  */
  1886. /*     PermIfQual -- Distributors in "qualifying" set must still   */
  1887. /*                     have written permission.                    */
  1888. /*     PermIfDisqual -- Distributors not in qualifying set may     */
  1889. /*                     still distribute product if they obtain     */
  1890. /*                     written permission.  Please note that the   */
  1891. /*                     author ALWAYS has the right to allow a      */
  1892. /*                     distribution by written permission,         */
  1893. /*                     regardless of the restrictions in the       */
  1894. /*                     VENDINFO record.  This field is here to     */
  1895. /*                     help the "non-qualifying" distributor       */
  1896. /*                     determine whether or not it's worth the     */
  1897. /*                     trouble to request written permission.      */
  1898. /*     NoIfDisqual -- Distributors not in qualifying set are not   */
  1899. /*                     allowed to distribute by this channel.      */
  1900. /*                     This field is actually redundant, but is in */
  1901. /*                     the record to remove any possible ambiguity */
  1902. /*                     regarding distribution rights.              */
  1903. /*     HiDensRequired -- Distribution on diskette may be done only */
  1904. /*                     on high-density diskettes.                  */
  1905. /*     NotifVersRequired -- Distributor who is operating without   */
  1906. /*                     written permission must notify author /     */
  1907. /*                     publisher of distribution and indicate the  */
  1908. /*                     version being distributed.                  */
  1909. /*     SampleRequired -- Distributor who is operating without      */
  1910. /*                     written permission must send an appropriate */
  1911. /*                     sample of the distributed product to the    */
  1912. /*                     author.  For mail-order disk vendors, this  */
  1913. /*                     means a copy of the catalog in which the    */
  1914. /*                     product is listed; for distribution by      */
  1915. /*                     other means it is a copy of the actual      */
  1916. /*                     material distributed, such as the rack      */
  1917. /*                     package, CD-ROM, magazine, book, etc.       */
  1918. /*     SampleRequested -- Author requests, but does not require,   */
  1919. /*                     a sample as described above.                */
  1920. /*     Royalty -- When distribution is done via this channel, a    */
  1921. /*                     royalty payment is required.  See royalty   */
  1922. /*                     information in the General section for more */
  1923. /*                     information about royalty amounts or        */
  1924. /*                     procedure.                                  */
  1925. /*     HasContactDate -- There is a date (vivDistDataContactDate)  */
  1926. /*                     beyond which distributor must check with    */
  1927. /*                     author for current version before           */
  1928. /*                     distributing by this channel.               */
  1929. /*     HasProhibDate -- There is a date beyond which distribution  */
  1930. /*                     of this version by this channel is not      */
  1931. /*                     allowed.                                    */
  1932. /*     HasAddlReqs -- There are additional requirements governing  */
  1933. /*                     distribution by this channel, in the        */
  1934. /*                     vidDistAddlReqs field.                      */
  1935.  
  1936.                  /*   Distribution Section (cont.)    */
  1937.  
  1938. /*     SeeText -- There are additional requirements governing      */
  1939. /*                     distribution by this channel in the human-  */
  1940. /*                     readable portion of the VENDINFO.DIZ file.  */
  1941. /*-----------------------------------------------------------------*/
  1942. #define  vibDistProhib                    0x00000001    /* d?mp  b */
  1943. #define  vibDistAny                       0x00000002    /* d?ma  b */
  1944. #define  vibDistAnyAsp                    0x00000004    /* d?maa b */
  1945. #define  vibDistAnyDisclose               0x00000008    /* d?mad b */
  1946. #define  vibDistAnyUG                     0x00000010    /* d?mau b */
  1947. #define  vibDistAnyNonProfUG              0x00000020    /* d?man b */
  1948. #define  vibDistAnyConsult                0x00000040    /* d?mac b */
  1949. #define  vibDistAnyHardware               0x00000080    /* d?mah b */
  1950. #define  vibDistAnyRecFromAuth            0x00000100    /* d?mar b */
  1951. #define  vibDistNoIfAnyCharge             0x00000200    /* d?mna b */
  1952. #define  vibDistNoIfPerYear               0x00000400    /* d?mny b */
  1953. #define  vibDistNoIfPerProg               0x00000800    /* d?mnp b */
  1954. #define  vibDistNoIfPer360K               0x00001000    /* d?mnk b */
  1955. #define  vibDistNoIfPerCdrom              0x00002000    /* d?mnc b */
  1956.  
  1957. /*----- The following fields are channel-specific, and are --------*/
  1958. /*----- allowed to have overlapping values                 --------*/
  1959. #define  vibDistNoIfCdrom                 0x00004000    /* d?mnr b */
  1960. #define  vibDistNoIfOtherMass             0x00008000    /* d?mno b */
  1961. #define  vibDistNoIfTargetBbs             0x00004000    /* d?mnb b */
  1962. #define  vibDistNoIfTargetDistrib         0x00008000    /* d?mnd b */
  1963. #define  vibDistNoIfTargetUser            0x00010000    /* d?mnu b */
  1964.  
  1965. #define  vibDistPermIfQual                0x00020000    /* d?mpq b */
  1966. #define  vibDistPermIfDisqual             0x00040000    /* d?mpd b */
  1967. #define  vibDistNoIfDisqual               0x00080000    /* d?mnd b */
  1968. #define  vibDistHiDensRequired            0x00100000    /* d?mh  b */
  1969. #define  vibDistNotifVersRequired         0x00200000    /* d?mv  b */
  1970. #define  vibDistSampleRequired            0x00400000    /* d?msr b */
  1971. #define  vibDistSampleRequested           0x00800000    /* d?msq b */
  1972. #define  vibDistRoyalty                   0x01000000    /* d?mr  b */
  1973. #define  vibDistHasContactDate            0x02000000    /* d?mdc b */
  1974. #define  vibDistHasProhibDate             0x04000000    /* d?mdp b */
  1975. #define  vibDistHasAddlReqs               0x08000000    /* d?mar b */
  1976. #define  vibDistSeeText                   0x10000000    /* d?m?? ? */
  1977.  
  1978.                  /*   Distribution Section (cont.)    */
  1979.  
  1980. /*------------------specific-channel distribution data fields -----*/
  1981. /*  These constants indicate the meanings of the variables in the  */
  1982. /*  vidData array.  Definitions are:                               */
  1983. /*       PerYear -- subscription of membership charge made by      */
  1984. /*                     distributor to user, calculated on annual   */
  1985. /*                     basis no matter how charged, and expressed  */
  1986. /*                     in U.S. dollars.                            */
  1987. /*       PerProg -- charge made by distributor for individual      */
  1988. /*                     product, in U.S. dollars.                   */
  1989. /*       Per360K -- charge made by distributor to user by volume   */
  1990. /*                     of information conveyed, such as per        */
  1991. /*                     diskette or per download hour, calculated   */
  1992. /*                     on the basis of 360K units no matter how    */
  1993. /*                     charged, and expressed in U.S. dollars.     */
  1994. /*       PerCdrom -- retail price of CD-ROM on which program is    */
  1995. /*                     distributed, in U.S. dollars.               */
  1996. /*       ContactDate -- date after which distributor must contact  */
  1997. /*                     author for new version, or to verify that   */
  1998. /*                     this version is current, before initiating  */
  1999. /*                     any distribution of this product.           */
  2000. /*       ProhibDate -- date after which all distribution of this   */
  2001. /*                     version by the indicated channel is         */
  2002. /*                     prohibited.                                 */
  2003. /*-----------------------------------------------------------------*/
  2004. #define  vivDistDataPerYear               0              /* d?dy n */
  2005. #define  vivDistDataPerProg               1              /* d?dp n */
  2006. #define  vivDistDataPer360K               2              /* d?dk n */
  2007. #define  vivDistDataPerCdrom              3              /* d?dc n */
  2008. #define  vivDistDataContactDate           4              /* d?dt s */
  2009. #define  vivDistDataProhibDate            5              /* d?dd s */
  2010.  
  2011.                   /************************************/
  2012.                   /*  VENDINFO Main Record Structure  */
  2013.                   /************************************/
  2014.  
  2015. /*---------------------------------- typedef viVendinfoRecord -----*/
  2016. /*  This is the fixed-length portion of the compressed data        */
  2017. /*  record in VENDINFO.DIZ.  It contains sections corresponding    */
  2018. /*  to the various major categories of information in the record,  */
  2019. /*  and ends with a single byte that indicates the type, if any,   */
  2020. /*  of the first record extension.                                 */
  2021. /*-----------------------------------------------------------------*/
  2022. typedef struct {
  2023.    viSectHeader  head;                         /*  11 fields,    45 bytes */
  2024.    viSectProduct prod;                         /* 100 fields,  4271 bytes */
  2025.    viSectAuthor  auth;                         /*  25 fields,   797 bytes */
  2026.    viSectOrder   ordr;                         /*  46 fields,  1073 bytes */
  2027.    viSectPrices  pric;                         /*  96 fields,   488 bytes */
  2028.    viSectSupport supp;                         /*  16 fields,   724 bytes */
  2029.    viSectGeneral genl;                         /*  23 fields,   571 bytes */
  2030.    viSectDistrib dist [ vivDistChanCount ];    /* 438 fields,  1261 bytes */
  2031.    byte          viRecExtensionType;           /*                 1 byte  */
  2032. } viVendinfoRecord;                            /* 755    fields,  9231 bytes */
  2033.  
  2034.                 /****************************************/
  2035.                 /*  Extensions to VENDINFO Main Record  */
  2036.                 /****************************************/
  2037.  
  2038. /*--------------------------- record extension identifiers () -----*/
  2039. /*  The last byte of the fixed-length data record is a record      */
  2040. /*  extension indicator.  If its value is zero, the data record    */
  2041. /*  has no extensions.  Otherwise, the byte represents the type of */
  2042. /*  the first extension record, which begins in the next byte.     */
  2043. /*  Each extension record is of fixed length, followed by a single */
  2044. /*  byte which is once again a record extension indicator.  By     */
  2045. /*  this means, any number of extensions, of potentially varying   */
  2046. /*  types, are possible.  At present, the only extension type is   */
  2047. /*  that concerned with defining a distributor for a specific      */
  2048. /*  geographical region.                                           */
  2049. /*-----------------------------------------------------------------*/
  2050. #define  vivRecExtensionNone              0     
  2051. #define  vivRecExtensionRegionalDist      1     
  2052.  
  2053. /*------------------------------------ typedef viRegionalDist -----*/
  2054. /*  Multiple instances of this record can appear as record         */
  2055. /*  extensions to the VENDINFO fixed-length data record.  Each of  */
  2056. /*  these represents information about a distributor authorized by */
  2057. /*  the author to represent the product in a specific geographical */
  2058. /*  area.  These arrangements need not be exclusive.  The point is */
  2059. /*  to make contact information available to potential customers   */
  2060. /*  (and perhaps other distributors, if applicable) in the region. */
  2061. /*-----------------------------------------------------------------*/
  2062. typedef struct {
  2063.    char         vidRegionCovered [ vivLenAddress ];      /* r?r  s */
  2064.    char         vidRegionAddress [ 6 ] [ vivLenAddress ];/* r?a  t */
  2065.    char         vidRegionPhone [ vivLenPhone ];          /* r?p  s */
  2066.    char         vidRegionFax [ vivLenPhone ];            /* r?f  s */
  2067.    byte         vidRegionMiscFlags;  /* vibRegion... */  /* r?m?   */
  2068.    word         vidRegionPrice[2];                       /* r?i? n */
  2069.    char         vidRegionCurrency [ vivLenCurrency ];    /* r?c  s */
  2070. } viRegionalDist;   /* 11 fields, 283 bytes */
  2071.  
  2072. /*--------------------------------- regional distributor info -----*/
  2073. /*  vidRegionFlags contains several boolean variables defining     */
  2074. /*  specific aspects of the service provided by the regional       */
  2075. /*  distributor in his defined geographical region.                */
  2076. /*-----------------------------------------------------------------*/
  2077. #define  vibRegionHandlesSupport          0x0001         /* r?ms b */
  2078. #define  vibRegionHandlesSoleSupport      0x0002         /* r?mo b */
  2079. #define  vibRegionHandlesOtherDist        0x0004         /* r?md b */
  2080. #define  vibRegionHandlesPress            0x0008         /* r?mp b */
  2081.  
  2082.  
  2083.                 /***************************************/
  2084.                 /*  VENDINFO Secondary File Structure  */
  2085.                 /***************************************/
  2086.  
  2087. /*-------------------------------------- typedef viSectHeader -----*/
  2088. /*  Secondary VENDINFO records contain an abbreviated human-       */
  2089. /*  readable text portion (as discussed earlier).  Record          */
  2090. /*  extensions are omitted.  The entire fixed-length VENDINFO      */
  2091. /*  record is included, in its usual, compressed form.  This       */
  2092. /*  allows automated processing of the individual distribution     */
  2093. /*  packages independently of one another, while eliminating most  */
  2094. /*  of the truly redundant information from the secondary records. */
  2095. /*-----------------------------------------------------------------*/
  2096.  
  2097.                /******************************************/
  2098.                /*  VENDINFO Executable Record Structure  */
  2099.                /******************************************/
  2100.  
  2101. /*------------------------------- executable record structure -----*/
  2102. /*  This is a short VENDINFO record that can optionally be added   */
  2103. /*  to executable programs.  It is created by the editor, and      */
  2104. /*  either appended by the editor or output in source-includable   */
  2105. /*  form.  The processor can scan executables for the presence of  */
  2106. /*  such records, and can detect some types of inappropriate or    */
  2107. /*  illegal distributions.  There is also a security feature that  */
  2108. /*  allows the executable record to provide an extra layer of      */
  2109. /*  security for the VENDINFO.DIZ record.  Since the executable    */
  2110. /*  record is INSIDE any security provided for the executable      */
  2111. /*  program itself (e.g., a CRC check), this can be a substantial  */
  2112. /*  form of protection against hacking or elimination of the       */
  2113. /*  VENDINFO record itself, at a cost of four bytes.               */
  2114. /*                                                                 */
  2115. /*  There are three different forms of the VENDINFO executable     */
  2116. /*  record.  There is a basic record, present in all cases.  Then, */
  2117. /*  for products in the "Shareware, Restricted Distribution"       */
  2118. /*  category, there is an additional section containing the        */
  2119. /*  product's channel-specific distribution restrictions.  This    */
  2120. /*  second portion of the record can have either a very brief form */
  2121. /*  or a complete form, at the discretion of the author.           */
  2122. /*-----------------------------------------------------------------*/
  2123.  
  2124. /*-------------------------------- typedef viExePrimaryRecord -----*/
  2125. /*  This portion of the record is always present.  The last part   */
  2126. /*  of this record contains four character strings.  Those strings */
  2127. /*  are actually stored in byte-count-first form, and must be      */
  2128. /*  extracted from the record dynamically.  They are shown below   */
  2129. /*  (in a comment) as if they were fixed-length fields, just to    */
  2130. /*  make clear their meanings and length limits.  As a concrete    */
  2131. /*  example, the product name "InContext" would be stored starting */
  2132. /*  in the next byte after vidExeAuthentKeyVI, and would take 10   */
  2133. /*  bytes.  The first byte would be the length of the string (9)   */
  2134. /*  and the remaining 9 bytes would contain the string itself,     */
  2135. /*  with no terminating null.                                      */
  2136. /*                                                                 */
  2137. /*  The vidExeType field actually contains several pieces of type  */
  2138. /*  and status information.  It is a byte whose bit structure is:  */
  2139. /*       76543210                                                  */
  2140. /*       x.......  For shareware with distribution restrictions,   */
  2141. /*                 this bit indicates that the long version of the */
  2142. /*                 distribution policy is included.                */
  2143. /*       .x......  This bit indicates that this executable is not  */
  2144. /*                 to be distributed without an accompanying       */
  2145. /*                 VENDINFO.DIZ file.                              */
  2146. /*       ..x.....  This bit indicates that this VENDINFO record    */
  2147. /*                 contains an authenticity key identifying the    */
  2148. /*                 accompanying VENDINFO.DIZ file.                 */
  2149. /*       ...xxxxx  These bits indicate the product distribution    */
  2150. /*                 category in which this executable falls, as     */
  2151. /*                 outlined in the vidGenlDistType field in the    */
  2152. /*                 main VENDINFO record.                           */
  2153.  
  2154.           /*  VENDINFO Executable Record Structure (cont.)  */
  2155.  
  2156. /*  NOTE: if the author wishes to use an "executable branding"     */
  2157. /*  scheme, to mark an evaluation version as registered when the   */
  2158. /*  user enters a valid registration number, s/he need only change */
  2159. /*  the *5-bit* value of the distribution category field to        */
  2160. /*  vivGenlTypeShareRegistered.  Programs that interpret VENDINFO  */
  2161. /*  records are required to correctly handle such records, even if */
  2162. /*  the remainder of the executable record is that normally seen   */
  2163. /*  only for products in the vivGenlTypeShareRestricted category.  */
  2164. /*  The author should make appropriate corrections for any CRC     */
  2165. /*  or other security schemes protecting the executable.  Note     */
  2166. /*  also that the first three bits of the vidExeType field         */
  2167. /*  should not be altered.                                         */
  2168. /*-----------------------------------------------------------------*/
  2169. typedef struct {
  2170.    char          vidExeViString[12];
  2171.    word          vidExeViVersion;
  2172.    byte          vidExeType;
  2173.    Date          vidExeVersionDate;
  2174.    long          vidExeCrc;
  2175.    long          vidExeUserId;
  2176.    long          vidExeAuthentKey1;
  2177.    long          vidExeAuthentKey2;
  2178.    long          vidExeAuthentKeyVI;
  2179.    char          vidExeProdName[16];
  2180.    char          vidExeVersion[5];
  2181.    char          vidExeCompanyName[41];
  2182.    char          vidExeQueriesPhone[20];
  2183. } viExePrimaryRecord;        /* 119 bytes */
  2184.  
  2185. /*--------------------------------- typedef viExeDistribShort -----*/
  2186. /*  The brief version of the distribution record contains only a   */
  2187. /*  single bit of information for each distribution channel.       */
  2188. /*  That bit is obtainined by ORing the values, for the channel in */
  2189. /*  question, of vibDistProhib and vibDistPermIfQual.  Thus, the   */
  2190. /*  the bit is set if distribution is prohibited for the channel   */
  2191. /*  or if all qualifying distributors are still required to        */
  2192. /*  obtain written permission.  The meaning of this bit is thus:   */
  2193. /*  if you have written permission from the author, it's OK to     */
  2194. /*  distribute by this channel; otherwise, it's not.  If this bit  */
  2195. /*  is *not* set, then it's simply not possible to determine from  */
  2196. /*  this abbreviated information whether or not distribution is    */
  2197. /*  OK.  In order to convey substantially more detail about the    */
  2198. /*  permissions, a good deal more information is needed, so        */
  2199. /*  there's not a clearly useful alternative short of the full     */
  2200. /*  distribution record.  Most authors will probably choose the    */
  2201. /*  long version, but this version is provided for those highly    */
  2202. /*  concerned about the amount of information added to the         */
  2203. /*  executable record.                                             */
  2204. /*-----------------------------------------------------------------*/
  2205. typedef struct {
  2206.     word          vidExeDistChanPermReqd;
  2207. } viExeDistribShort;            /* 2 bytes */
  2208.  
  2209.           /*  VENDINFO Executable Record Structure (cont.)  */
  2210.  
  2211. /*---------------------------------- typedef viExeDistribLong -----*/
  2212. /*  The long version of the distribution record contains all the   */
  2213. /*  information in the distribution section of the main record,    */
  2214. /*  and the information is laid out in the same order.  However,   */
  2215. /*  the record is abbreviated because missing values are excluded, */
  2216. /*  and because strings, when present, are in byte-count-first     */
  2217. /*  format.  Specifically, the information about each channel      */
  2218. /*  appears together, in the order indicated in viSectDistrib.     */
  2219. /*  However, the six data values (vidDistData) and the             */
  2220. /*  vidDistAddlReqs string appear only if the corresponding bits   */
  2221. /*  (vibDistNoIfPerYear, vibDistNoIfPerProg, vibDistNoIfPer360K,   */
  2222. /*  vibDistNoIfPerCdrom, vibDistHasContactDate,                    */
  2223. /*  vibDistHasProhibDate, vibDistHasAddlReqs) are on.              */
  2224. /*-----------------------------------------------------------------*/
  2225. typedef struct {
  2226.    viSectDistrib dist [ vivDistChanCount ];
  2227. } viExeDistribLong;            /* 1261 bytes */
  2228.  
  2229.                      /*****************************/
  2230.                      /*  Distribution Flag Masks  */
  2231.                      /*****************************/
  2232.  
  2233. /*----------------------------------- distribution flag masks -----*/
  2234. /*  These words contain OR'd flags defining the applicability of   */
  2235. /*  the distribution flags to the various distribution types.  For */
  2236. /*  example, the "vidDistAnyConsult" flag is relevant to direct    */
  2237. /*  installation of the product on the user's machine, but not to  */
  2238. /*  BBS distribution.  Tools that create or use VENDINFO.DIZ files */
  2239. /*  are required to use these masks to eliminate from              */
  2240. /*  consideration any distribution flags that do not apply to the  */
  2241. /*  particular channel.                                            */
  2242. /*                                                                 */
  2243. /*  For clarity, the definitions of these flag masks are organized */
  2244. /*  in the following way, by line:                                 */
  2245. /*        Prohibited                                               */
  2246. /*        Qualifiers                                               */
  2247. /*        Disqualifiers                                            */
  2248. /*        Permission applicability                                 */
  2249. /*        Hi-density/notification/catalog requirements             */
  2250. /*        Royalties                                                */
  2251. /*        Dates                                                    */
  2252. /*        Additional requirements                                  */
  2253. /*-----------------------------------------------------------------*/
  2254. EXTERN   long   vidDistFlagMasks [ vivDistChanCount ]
  2255. #ifdef VENDINFO_MAIN
  2256.    = {
  2257.    /* BBS */
  2258.       vibDistProhib +
  2259.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2260.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2261.       vibDistNoIfAnyCharge + vibDistNoIfPerYear + vibDistNoIfPerProg +
  2262.          vibDistNoIfPer360K +
  2263.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2264.       vibDistNotifVersRequired +
  2265.       0 +
  2266.       vibDistHasContactDate + vibDistHasProhibDate +
  2267.       vibDistHasAddlReqs + vibDistSeeText,
  2268.  
  2269.    /* BBS file-distribution net */
  2270.       vibDistProhib +
  2271.       vibDistAny + vibDistAnyRecFromAuth +
  2272.       vibDistNoIfCdrom + vibDistNoIfOtherMass +
  2273.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2274.       vibDistNotifVersRequired +
  2275.       0 +
  2276.       vibDistHasContactDate + vibDistHasProhibDate +
  2277.       vibDistHasAddlReqs + vibDistSeeText,
  2278.  
  2279.    /* mail-order disk vendor */
  2280.       vibDistProhib +
  2281.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2282.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2283.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2284.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2285.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2286.          vibDistSampleRequired + vibDistSampleRequested +
  2287.       vibDistRoyalty +
  2288.       vibDistHasContactDate + vibDistHasProhibDate +
  2289.       vibDistHasAddlReqs + vibDistSeeText,
  2290.  
  2291.                  /*  Distribution Flag Masks (cont.)  */
  2292.  
  2293.    /* CD-ROM other than BBS file-distribution network */
  2294.       vibDistProhib +
  2295.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2296.          vibDistAnyRecFromAuth +
  2297.       vibDistNoIfPerCdrom + vibDistNoIfPerProg + vibDistNoIfPer360K +
  2298.          vibDistNoIfTargetBbs + vibDistNoIfTargetDistrib +
  2299.          vibDistNoIfTargetUser +
  2300.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2301.       vibDistNotifVersRequired + vibDistSampleRequired +
  2302.          vibDistSampleRequested +
  2303.       vibDistRoyalty +
  2304.       vibDistHasContactDate + vibDistHasProhibDate +
  2305.       vibDistHasAddlReqs + vibDistSeeText,
  2306.  
  2307.    /* one-site rack vendor */
  2308.       vibDistProhib +
  2309.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2310.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2311.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2312.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2313.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2314.          vibDistSampleRequired + vibDistSampleRequested +
  2315.       vibDistRoyalty +
  2316.       vibDistHasContactDate + vibDistHasProhibDate +
  2317.       vibDistHasAddlReqs + vibDistSeeText,
  2318.  
  2319.    /* rack distributor */
  2320.       vibDistProhib +
  2321.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2322.          vibDistAnyRecFromAuth +
  2323.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2324.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2325.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2326.          vibDistSampleRequired + vibDistSampleRequested +
  2327.       vibDistRoyalty +
  2328.       vibDistHasContactDate + vibDistHasProhibDate +
  2329.       vibDistHasAddlReqs + vibDistSeeText,
  2330.  
  2331.    /* book enclosure */
  2332.       vibDistProhib +
  2333.       vibDistAny + vibDistAnyRecFromAuth +
  2334.       0 +
  2335.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2336.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2337.          vibDistSampleRequired + vibDistSampleRequested +
  2338.       vibDistRoyalty +
  2339.       vibDistHasContactDate + vibDistHasProhibDate +
  2340.       vibDistHasAddlReqs + vibDistSeeText,
  2341.  
  2342.    /* subscription service */
  2343.       vibDistProhib +
  2344.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2345.          vibDistAnyRecFromAuth +
  2346.       vibDistNoIfPerYear + vibDistNoIfPerProg + vibDistNoIfPer360K +
  2347.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2348.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2349.          vibDistSampleRequired + vibDistSampleRequested +
  2350.       vibDistRoyalty +
  2351.       vibDistHasContactDate + vibDistHasProhibDate +
  2352.       vibDistHasAddlReqs + vibDistSeeText,
  2353.  
  2354.                  /*  Distribution Flag Masks (cont.)  */
  2355.  
  2356.    /* magazine cover disk */
  2357.       vibDistProhib +
  2358.       vibDistAny + vibDistAnyRecFromAuth +
  2359.       0 +
  2360.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2361.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2362.          vibDistSampleRequired + vibDistSampleRequested +
  2363.       vibDistRoyalty +
  2364.       vibDistHasContactDate + vibDistHasProhibDate +
  2365.       vibDistHasAddlReqs + vibDistSeeText,
  2366.  
  2367.    /* broadcast by TV/cable/satellite/etc. */
  2368.       vibDistProhib +
  2369.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2370.          vibDistAnyRecFromAuth +
  2371.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2372.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2373.       vibDistNotifVersRequired +
  2374.       vibDistRoyalty +
  2375.       vibDistHasContactDate + vibDistHasProhibDate +
  2376.       vibDistHasAddlReqs + vibDistSeeText,
  2377.  
  2378.    /* 1-900 phone-type service */
  2379.       vibDistProhib +
  2380.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2381.          vibDistAnyRecFromAuth +
  2382.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2383.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2384.       vibDistNotifVersRequired +
  2385.       vibDistRoyalty +
  2386.       vibDistHasContactDate + vibDistHasProhibDate +
  2387.       vibDistHasAddlReqs + vibDistSeeText,
  2388.  
  2389.    /* installation on user's machine by paid consultant, VAR, etc. */
  2390.       vibDistProhib +
  2391.       vibDistAny + vibDistAnyDisclose + vibDistAnyConsult +
  2392.          vibDistAnyHardware + vibDistAnyRecFromAuth +
  2393.       0 +
  2394.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2395.       vibDistNotifVersRequired +
  2396.       vibDistRoyalty +
  2397.       vibDistHasContactDate + vibDistHasProhibDate +
  2398.       vibDistHasAddlReqs + vibDistSeeText,
  2399.  
  2400.    /* distribution by substantially different method */
  2401.       vibDistProhib +
  2402.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2403.          vibDistAnyRecFromAuth +
  2404.       0 +
  2405.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2406.       vibDistNotifVersRequired +
  2407.          vibDistSampleRequired + vibDistSampleRequested +
  2408.       vibDistRoyalty +
  2409.       vibDistHasContactDate + vibDistHasProhibDate +
  2410.       vibDistHasAddlReqs + vibDistSeeText
  2411.    }
  2412. #endif
  2413.    ;
  2414. #endif   /* __VENDINFO_H */
  2415.  
  2416.               /****************************************/
  2417.               /*  Standards Applicable to Programs    */
  2418.               /*  that Create or Use VENDINFO Records */
  2419.               /****************************************/
  2420.  
  2421. /*------------------------------------------- tools standards -----*/
  2422. /*  This standard is mainly about the file format for VENDINFO.DIZ */
  2423. /*  files, with minor additional record-format information.  It is */
  2424. /*  also important, though, to establish some common understand-   */
  2425. /*  ings about tools.  In some cases, these understandings serve   */
  2426. /*  to clarify the division of responsibility between tools that   */
  2427. /*  create VENDINFO records and tools that use them.  In other     */
  2428. /*  cases, these tools standards specify tools behavior necessary  */
  2429. /*  to support the mutual understandings of the authors and the    */
  2430. /*  distributors who use the VENDINFO system.                      */
  2431. /*                                                                 */
  2432. /*  Software developers who create tools that use VENDINFO records */
  2433. /*  can automatically satisfy most of these requirements by using  */
  2434. /*  the standard VENDINFO software developer's library.            */
  2435. /*                                                                 */
  2436. /*  This section is still under development, and will probably     */
  2437. /*  be expanded in the final version.                              */
  2438. /*-----------------------------------------------------------------*/
  2439.  
  2440. /*------------------------------------------------ null bytes -----*/
  2441. /*  Tools that create VENDINFO records are required to place a     */
  2442. /*  null value (0x00) in all unused bytes of the compressed        */
  2443. /*  VENDINFO data record, in order to maximize the degree to which */
  2444. /*  the record can be compressed.  This means, for example, that a */
  2445. /*  fixed-length string field would have a null byte indicating    */
  2446. /*  the termination of the string, and additional null bytes as    */
  2447. /*  necessary to fill out the string to its full, fixed length.    */
  2448. /*  This also means that the default value for unused fields will  */
  2449. /*  be all zeroes.                                                 */
  2450. /*-----------------------------------------------------------------*/
  2451.  
  2452. /*-------------------------------------------- implied values -----*/
  2453. /*  Wherever a value in one field implies a particular value for   */
  2454. /*  another field, it is the responsibility of the creation tool,  */
  2455. /*  and not the processing tool, to fill the second field with     */
  2456. /*  that value.  For example, if the value of the vibDistAny bit   */
  2457. /*  is TRUE for a given distribution channel, the editor will also */
  2458. /*  set to TRUE the values of the vibDistAnyAsp bit, the           */
  2459. /*  vibDistAnyDisclose bit, etc., since these values are implied.  */
  2460. /*-----------------------------------------------------------------*/
  2461.  
  2462. /*-------------------------------------- equal values if same -----*/
  2463. /*  Whenever there is a provision for multiple sets of similar     */
  2464. /*  values (minimum/maximum, minimum/full, required/recommended,   */
  2465. /*  etc.), all values will be filled in in both sets, even if the  */
  2466. /*  second set can be seen to be inapplicable.  For example, if    */
  2467. /*  there is only one registration price for a shareware product,  */
  2468. /*  both the minimum and maximum viRegPkg structures will be       */
  2469. /*  filled in, using identical values.                             */
  2470. /*-----------------------------------------------------------------*/
  2471.  
  2472. /*--------------------------------------------- known version -----*/
  2473. /*  The VENDINFO file structure may change from version to         */
  2474. /*  version.  Any processing tool is required to check the version */
  2475. /*  field, and to make no attempt to use the record if the version */
  2476. /*  is not "known" to the processor.  An error message and a       */
  2477. /*  distinct return code are recommended in most cases.            */
  2478. /*-----------------------------------------------------------------*/
  2479.  
  2480.           /*  Standards Applicable to Programs (cont.) */
  2481.  
  2482. /*-------------------------- testing for allowed distribution -----*/
  2483. /*  Any program which evaluates the author's distribution policy   */
  2484. /*  for a particular channel is required to employ the following   */
  2485. /*  algorithm:                                                     */
  2486. /*                                                                 */
  2487. /*     1. Apply the channel's Distribution Flag Mask to that       */
  2488. /*        channel's vidDistFlags field, eliminating from all       */
  2489. /*        consideration those bits that do not apply to the        */
  2490. /*        channel in question.  (Also, editors that create the    */
  2491. /*        record are required to apply this mask, insuring that    */
  2492. /*        all irrelevant bits are set FALSE.)                      */
  2493. /*                                                                 */
  2494. /*     2. Determine whether or not the distributor "qualifies",    */
  2495. /*        based upon the distributor's explicit statements about   */
  2496. /*        the proposed distribution.  No assumptions are allowed   */
  2497. /*        here.  For example, in order to qualify via the          */
  2498. /*        vibDistAnyDisclose approach, the distributor must        */
  2499. /*        separately specify satisfaction of each of the defining  */
  2500. /*        conditions (e.g., claims no ownership of product).       */
  2501. /*                                                                 */
  2502. /*     3. If the distributor "qualifies", test all the disqualify- */
  2503. /*        ing conditions specified by the author against the       */
  2504. /*        distributor's explicit statements about the proposed     */
  2505. /*        distribution.  No assumptions are allowed here.  For     */
  2506. /*        example, if the author has specified a limit on          */
  2507. /*        subscription fees (vivDistNoIfPerYear), the distributor  */
  2508. /*        can satisfy this requirement only by specifying the      */
  2509. /*        amount (even if zero) that s/he actually charges per     */
  2510. /*        year.                                                    */
  2511. /*                                                                 */
  2512. /*     4. If the proposed distribution still meets the             */
  2513. /*        "qualifying" requirements, determine whether or not      */
  2514. /*        written permission is still required; if the proposed    */
  2515. /*        distribution lies outside the qualifying requirements,   */
  2516. /*        determine whether or not the distribution is still       */
  2517. /*        possible given written permission.  If either of these   */
  2518. /*        conditions applies and the distributor has not           */
  2519. /*        indicated that s/he has written permission, report the   */
  2520. /*        requirement for written permission.                      */
  2521. /*                                                                 */
  2522. /*     5. In addition to any unsatisfied conditions reported as a  */
  2523. /*        result of the preceding steps, report any additional     */
  2524. /*        author conditions (e.g., notification required) that     */
  2525. /*        cannot be seen to be inapplicable based on the explicit  */
  2526. /*        statements by the distributor.                           */
  2527. /*-----------------------------------------------------------------*/
  2528.  
  2529. /*------------------------------- verification of information -----*/
  2530. /*  Any tool that creates VENDINFO records is required to provide  */
  2531. /*  an active verification mechanism which gives feedback to the   */
  2532. /*  author about the choices selected, and provides an opportunity */
  2533. /*  to notice unintended choices or consequences.  This feature is */
  2534. /*  intended to increase the confidence with which a distributor   */
  2535. /*  can use the resulting VENDINFO information, and to reduce      */
  2536. /*  errors by authors.  This mechanism may take various forms:     */
  2537. /*  verification step in an interactive editor, a batch procedure  */
  2538. /*  that prints out the file contents and is well documented and   */
  2539. /*  recommended so the author is aware of the need to perform it,  */
  2540. /*  etc.                                                           */
  2541. /*-----------------------------------------------------------------*/
  2542.  
  2543.           /*  Standards Applicable to Programs (cont.) */
  2544.  
  2545. /*---------------------------------- authentication of record -----*/
  2546. /*  Any tool that processes VENDINFO records is required to test   */
  2547. /*  the records for correct CRC values, authenticity, etc., and to */
  2548. /*  report failures in a detectable way, unless the user has       */
  2549. /*  explicitly chosen to suppress such testing.                    */
  2550. /*-----------------------------------------------------------------*/
  2551.  
  2552. /*------------------------------------- other tools standards -----*/
  2553. /*  Standards for tools are also mentioned here and there through- */
  2554. /*  out the file-format portion of this standard.                  */
  2555. /*-----------------------------------------------------------------*/
  2556.